它是违法的main()函数的地址?(Is it illegal to take address of

2019-07-22 03:27发布

根据此答案 使用main()函数是非法的 (§3.6.1.3),并且如果其名称出现在潜在的评估表达式用于一个函数(§3.2)。

假设我有这样的代码:

printf( "%p", &main );

其中功能的名称main()出现在表达式&main

将上面的代码是非法的?

Answer 1:

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

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



Answer 2:

由于main不是“用”(你不评价它),那么它应该根据您所提供的链接是合法的。



Answer 3:

这不是通常使用指针main()或地址main()但..

无论如何,这是因为不允许的,因为每一个功能(以及任何符号,如变量)它有它自己的地址。 而可能需要的main()的地址 - 尤其是当你编写嵌入式系统的代码,你的代码的动态加载播放或运行时检查。 或者有一个引导程序和实际运行的固件。

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

请参阅的MicroC-OS / II或VxWorks -无论是使用main()这样



文章来源: Is it illegal to take address of main() function?