根据这个答案使用函数main()是非法的(§3.6.1.3),如果函数的名称出现在可能求值的表达式中(§3.2),则使用。
假设我有这样的代码:printf( "%p", &main );
函数名称main()
出现在表达式&main
中。
上面的代码是非法的吗?
是。正如你引用的,标准说你不能使用main
。
还要注意函数的地址不匹配"%p"
。对应的参数必须具有类型void*
;任何其他type(可能char*
除外)是非法的,并导致undefined行为。
既然main
没有被"使用"(你没有评估它),那么根据你提供的链接,它应该是合法的
通常不使用指向main()
或main()
地址的指针,但是…
通常main()
是动态加载代码(例如从FLASH到RAM)的入口点,因此在引导加载程序中引用(直接调用或分配给相关指针)。
参考MicroC-OS/II或VxWorks -两者都以这种方式使用main()