我刚刚阅读了Accelerated C++的第一章(看起来像一本很棒的书),最后作者说了
然而,明确地包括从主要回归是一种良好的做法。
为什么这被认为是好习惯?在C99中,我总是省略return 0
,使用exit()
表示程序异常终止,并且从未错过显式返回。
答案 0 :(得分:7)
有几个原因,
首先,声明main返回int,因此它应该
其次,也许更重要的是,对于C ++,main的exit()将跳过在main中调用本地对象实例的析构函数。
答案 1 :(得分:4)
在C99和C ++中,如果程序的执行到达main()
函数的右括号,则执行隐式return 0;
。在C90中情况并非如此 - 如果没有明确的main()
到达return
的末尾将导致返回不确定的值(严格来说,行为未定义)。
我只能猜测“加速C ++”的作者认为明确的回归是好的做法,因为它使你的意图明确。我能想到的另一个原因是它使代码与C90兼容,但我发现很难相信这会有很大的重要性。
答案 2 :(得分:1)
调用程序(通常是OS shell)可以收集返回代码并知道程序是否失败。
从程序中获得一个退出点是一个放置断点的好地方。
如果您不熟悉程序,只需一个执行流就可以更轻松地执行该程序。
答案 3 :(得分:1)
我认为这个经验法则并不适用于调用exit()
,而是在没有返回任何内容的情况下脱离main()
,依赖于隐式return 0
运行时系统在那种情况下做。
我猜main()
是返回值的唯一函数,您可以省略显式返回值。国际海事组织这是一个非常好的理由不依赖这一规则。
答案 4 :(得分:-1)
通过C ++标准main()应该返回int。这是一个错误代码应用程序在其终止时返回,实际上,当调用进程想知道此应用程序是否成功终止(通常错误代码在这种情况下为0)或失败时,这很有用。
我将给出一个Microsoft特定示例,但它显示了返回错误代码的一般需求: ProcessA需要创建ProcessB并等待它终止,之后它想要检查ProcessB是否成功执行。 ProcessA将使用CreateProcess函数创建ProcessB,然后将使用ProcessB的句柄等待其终止,然后使用GetExitCodeProcess函数获取ProcessB终止代码 - 这是从main()返回的int值。