C ++标准中的$ 3.6.1 / 1节,
程序应包含一个名为main的全局函数,它是程序的指定开始。
现在考虑这段代码,
int square(int i) { return i*i; }
int user_main()
{
for ( int i = 0 ; i < 10 ; ++i )
std::cout << square(i) << endl;
return 0;
}
int main_ret= user_main();
int main()
{
return main_ret;
}
此示例代码执行我打算执行的操作,即在进入main()应该是程序“开始” 的函数之前打印从0到9的整数平方。
我还用-pedantic选项GCC 4.5.0 编译它。它没有错误,甚至没有警告!
所以我的问题是,
这段代码真的符合标准吗?
如果它符合标准,那么它是否会使标准所说的无效?main()不是这个计划的开始!user_main()在执行之前执行main()。
我知道要初始化全局变量main_ret,use_main()首先执行,但这是完全不同的事情; 关键是,它确实使标准中的引用语句$ 3.6.1 / 1无效,因为main()它不是程序的开始 ; 事实上,这个计划已经结束了!
编辑:
你如何定义'开始'这个词?
它归结为“程序开始”这一短语的定义。那么你究竟如何定义呢?