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;
}
这个示例代码做到了我想做的事情,即打印从0到9的整数的平方,并在进入“main()”函数之前完成。 “main()”函数应该是程序的“开始”。
我还使用了GCC 4.5.0的-pedantic
选项进行了编译。 它没有错误,甚至没有警告!
因此,我的问题是,
这段代码是否真正符合标准?
如果它符合标准,那么它不会使标准失效吗?main()
不是此程序的开始!user_main()
在main()
之前执行。
我知道use_main()
先执行以初始化全局变量main_ret
,但那是完全不同的事情;关键是,它确实使引用的标准$3.6.1/1无效,因为main()
不是程序的开始;实际上,它是此程序的结尾!
编辑:
您如何定义“开始”?
这归结为对短语"start of the program"的定义。 那么您如何定义它?