C ++ Standard的$ 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()
不是程序的开始;实际上,该程序已结束!
编辑:
您如何定义“开始”一词?
归结为短语“程序启动”的定义。那么您如何定义它呢?
main()
作为“启动程序”