gpt4 book ai didi

c++ - main() 真的是 C++ 程序的开始吗?

转载 作者:IT老高 更新时间:2023-10-28 11:33:07 24 4
gpt4 key购买 nike

C++ 标准中的 $3.6.1/1 部分写道,

A program shall contain a globalfunction called main, which is thedesignated 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com