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