C + + 标准的 $3.6.1/1部分写道,
一个程序应该包含一个全局 函数 总台,它是 指定为程序的 开始。
现在考虑这个代码,
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()
函数中,这个函数应该是程序的“开始”。
我还用 -pedantic
选项编译了它,GCC4.5.0。它没有错误,甚至没有警告!
所以我的问题是,
这个代码真的符合标准吗?
如果它符合标准,那么它不会使标准所说的无效吗?main()
不是这个程序的开始!在 main()
之前执行的 user_main()
。
我理解为了初始化全局变量 main_ret
,use_main()
首先执行,但这是完全不同的事情; 关键是,它 是的使引用的语句 $3.6.1/1从标准失效,因为 main()
不是程序的 开始; 它实际上是 这个程序的 结束!
编辑:
它可以归结为短语 “节目开始”的定义。那么你如何确切地定义它呢?