C++ 为什么从main()显式返回0被视为良好做法?

C++ 为什么从main()显式返回0被视为良好做法?,c++,C++,可能重复: 我刚刚读了(似乎是一本很棒的书)的第一章,最后作者说 然而,明确地包含main的返回是一个好的实践` 为什么这被认为是良好的做法?在C99中,我总是省略返回0,使用exit()发出程序异常终止的信号,并且从未错过显式返回。调用程序(通常是操作系统外壳)可以收集返回码,并知道程序是否失败 程序中只有一个退出点是放置断点的好地方 如果您不熟悉某个程序,使用单个执行流可以更容易地执行该程序。有几个原因 首先,main被声明为返回int,因此它应该 第二,更重要的是,C++中的main(m

可能重复:

我刚刚读了(似乎是一本很棒的书)的第一章,最后作者说

然而,明确地包含main的返回是一个好的实践`

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

调用程序(通常是操作系统外壳)可以收集返回码,并知道程序是否失败

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

如果您不熟悉某个程序,使用单个执行流可以更容易地执行该程序。

有几个原因

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


第二,更重要的是,C++中的main(main)将跳过调用本地对象实例的调用析构函数。

我认为这个经验法则不是太多地应用于调用“代码> >()/代码>,而是要在不返回任何东西的情况下退出<代码>主())/>代码。在这种情况下,运行时系统必须依赖隐式
返回0


我猜
main()
是唯一一个返回值的函数,您可以忽略显式返回值。在国际海事组织,这是一个很好的理由,不依赖于该规则主()/Cuth>函数的闭合支撑,则隐式<代码>返回0;代码>被执行。C90中的情况并非如此-在没有显式返回的情况下到达
main()
的末尾将导致返回不确定的值(严格来说,行为是未定义的)

我只能猜测,“加速C++”的作者认为显式返回是一种很好的实践,因为它使您的意图变得明确。我能想到的唯一另一个原因是它使代码与C++兼容,但我很难相信这会有很大的权重。应该返回int。这是一个错误代码,应用程序在终止时返回,实际上,当调用进程想知道该应用程序是成功终止(在这种情况下,错误代码通常为0)还是失败时,这很有用

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

#1无关紧要。离开main而不显式返回任何内容就是隐式返回
0
如果您还希望有一个退出点并指示异常终止。@访客,您可以有一个跟踪程序状态的变量并返回该变量。如果我错了,请纠正我,但我认为在C99之前,如果可以确定,具有声明的返回类型的函数可以合法返回,而不指定值(例如基于参数)调用方永远不会尝试使用返回值。这并不是说任何人都应该编写这样的代码,但我认为在C99之前,这样的代码是合法的,并且没有调用UB。