【发布时间】:2013-03-09 16:03:54
【问题描述】:
根据this answer 使用函数 main() 是非法的(第 3.6.1.3 节),如果函数的名称出现在可能计算的表达式中,则使用函数( §3.2)。
假设我有这个代码:
printf( "%p", &main );
函数名称main()出现在表达式&main中。
上面的代码会不会是非法的?
【问题讨论】:
-
§3.2 定义了“odr-used”,而不是“used”。我认为这里“使用”的含义更为笼统——你不能以任何方式使用
main。 -
好问题。出于好奇——你为什么需要这个?或者问你的问题是基于相同的,我问的是我的:)
-
@sftrabbit C++03 清楚地说:“如果对象或非重载函数的名称出现在潜在求值的表达式中,则使用它。” C++11 没有说明“使用”是什么意思;我的猜测是引入“odr-used”是为了解决其他一些问题,没有人解决对
main的限制。 -
@JamesKanze 啊,我在看 C++11。
-
另见this question关于打印函数指针。