根据此答案 使用main()函数是非法的 (§3.6.1.3),并且如果其名称出现在潜在的评估表达式用于一个函数(§3.2)。
假设我有这样的代码:
printf( "%p", &main );
其中功能的名称main()
出现在表达式&main
。
将上面的代码是非法的?
根据此答案 使用main()函数是非法的 (§3.6.1.3),并且如果其名称出现在潜在的评估表达式用于一个函数(§3.2)。
假设我有这样的代码:
printf( "%p", &main );
其中功能的名称main()
出现在表达式&main
。
将上面的代码是非法的?
是。 当你引用的标准说,你不能使用main
。
还要注意的是函数的地址不匹配"%p"
。 对应参数必须具有类型void*
; 任何其他类型的(也许除了char*
)是非法的,并导致不确定的行为。
由于main
不是“用”(你不评价它),那么它应该根据您所提供的链接是合法的。
这不是通常使用指针main()
或地址main()
但..
无论如何,这是因为不允许的,因为每一个功能(以及任何符号,如变量)它有它自己的地址。 而可能需要的main()的地址 - 尤其是当你编写嵌入式系统的代码,你的代码的动态加载播放或运行时检查。 或者有一个引导程序和实际运行的固件。
常main()
是一个入口点动态加载的代码(例如,从FLASH到RAM),并且因此它被引用(直接调用或分配给相关指针)在引导加载程序。
请参阅的MicroC-OS / II或VxWorks -无论是使用main()
这样