关于c ++:为什么从main()显式返回0被认为是好的做法?


Why is explicitly returning 0 from main() considered good practice?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
return statement vs exit() in main()

我刚读了《加速C++》的第一章(好像是一本很棒的书),作者最后说。

However, explicitly including a return from main is good practice.`

为什么这被认为是良好的做法?在c99中,我总是省略return 0,使用exit()来表示异常程序终止,并且从未错过显式返回。


有几个原因,

首先,main声明返回int,因此它应该

其次,更重要的是,Cmain的主从会跳过主对象实例的调用析构函数。


在C99和C++中,如果程序的执行达到EDCOX1×1函数的闭合支撑,则执行隐式return 0;。在C90中,情况并非如此——如果没有明确的return,到达main()的末尾,将导致返回一个不确定的值(严格来说,行为是不确定的)。

我只能猜测,"加速C++"的作者认为,明确的回报是好的实践,仅仅是因为它使你的意图明确。我唯一能想到的另一个原因是它使代码与C90兼容,但我发现很难相信这会成为一个很重要的原因。


我认为这种经验法则不太适用于调用exit(),而是在不返回任何内容的情况下从main()上掉下来,依赖于运行时系统在这种情况下必须执行的隐式return 0

我猜main()是唯一一个返回值的函数,您可以忽略显式返回值。在我看来,这是一个很好的理由不依赖这条规则。


调用程序(通常是OS shell)可以收集返回代码并知道程序是否失败。

从程序中只有一个出口点是放置断点的好地方。

如果您不熟悉某个程序,那么拥有单一的执行流可以更容易地执行它。


通过C++标准MIN()应该返回int。这是一个错误代码应用程序在它的终止时返回,在实践中,这是有用的,当调用进程想要知道这个应用程序是否以成功终止(通常错误代码是在这种情况下为0)或者它失败了。

我将给出一个特定于Microsoft的示例,但它显示了返回错误代码的一般需要:processa需要创建processb并等待它终止,然后检查processb是否成功执行。ProcessA将使用CreateProcess函数创建ProcessB,然后使用ProcessB的句柄等待其终止,然后使用GetExitCodeProcess函数获取ProcessB终止代码-这是从main()返回的int值。