C++ 标准中的 $3.6.1/1 部分写道,
A program shall contain a global function called main, which is the designated start of the program.
现在考虑这段代码,
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
选项编译它,GCC 4.5.0。它没有给出错误,甚至没有警告!
所以我的问题是,
这段代码真的符合标准吗?
如果它符合标准,那么它不会使标准所说的无效吗? main()
不是这个程序的开始! user_main()
在 main()
之前执行。
我知道要初始化全局变量 main_ret
,首先执行 use_main()
但这完全是另一回事;关键是,它确实使标准中引用的语句 $3.6.1/1 无效,因为 main()
不是 start该程序;它实际上是这个程序的结束!
编辑:
你如何定义“开始”这个词?
归结为短语“程序开始”的定义。那么具体是怎么定义的呢?
最佳答案
你读错了句子。
A program shall contain a global function called main, which is the designated start of the program.
该标准为该标准的其余部分定义了“开始”一词。它并不是说在调用 main
之前没有代码执行。它说程序的开始被认为是在函数 main
.
您的程序合规。在 main 启动之前,您的程序还没有“启动”。根据标准中“开始”的定义,在您的程序“开始”之前调用该函数,但这并不重要。在每个程序中曾经调用 main
之前,都会执行很多代码,而不仅仅是这个例子。
出于讨论的目的,您的函数在程序“启动”之前执行,这完全符合标准。
关于c++ - main() 真的是 C++ 程序的开始吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4783404/