获取main()函数的地址是否非法?



根据这个答案使用函数main()是非法的(§3.6.1.3),如果函数的名称出现在可能求值的表达式中(§3.2),则使用

假设我有这样的代码:
printf( "%p", &main );

函数名称main()出现在表达式&main中。

上面的代码是非法的吗?

是。正如你引用的,标准说你不能使用main

还要注意函数的地址匹配"%p"。对应的参数必须具有类型void*;任何其他type(可能char*除外)是非法的,并导致undefined行为。

既然main没有被"使用"(你没有评估它),那么根据你提供的链接,它应该是合法的

通常不使用指向main()main()地址的指针,但是…

无论如何,这是允许的,因为每个函数(和任何符号,例如变量)都有自己的地址。main()的地址可能是需要的——特别是当您为嵌入式系统编写代码,并且需要动态加载代码或运行时检查时。或者有一个引导加载程序和实际运行的固件。

通常main()是动态加载代码(例如从FLASH到RAM)的入口点,因此在引导加载程序中引用(直接调用或分配给相关指针)。

参考MicroC-OS/II或VxWorks -两者都以这种方式使用main()

最新更新