Main() 被误解为 C 中的绝对开始
与普遍看法相反,$3.6.1/ 节中的 C 标准1,通过声明“程序应包含一个名为 main 的全局函数,它是程序的指定开始”,并不意味着前面没有代码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_ret 通过在调用 main() 函数之前执行 user_main() 来实现。尽管有这样的执行顺序,user_main() 并不被视为标准定义的程序的真正“开始”。
C 标准中“开始”的定义
问题的关键在于对“开始”的解释。标准将 main() 指定为程序的“指定开始”,有效地将“开始”定义为调用 main() 的点。但是,它并不禁止在此指定之前执行代码。
对代码合规性的影响
根据这种解释,给定的代码片段完全符合C 标准。即使 user_main() 在 main() 之前执行,程序的“开始”仍然在 main() 被调用的地方。
结论
虽然看起来可能直觉上 main() 应该是 C 程序的绝对开始,但标准采用了不同的定义。它将 main() 建立为程序“启动”的指定点,以便进一步执行和规范。
以上是`main()` 真的标志着 C 程序的绝对开始吗?的详细内容。更多信息请关注PHP中文网其他相关文章!