代码之家  ›  专栏  ›  技术社区  ›  helpermethod

为什么从main()显式返回0被视为良好实践?[副本]

c++
  •  3
  • helpermethod  · 技术社区  · 15 年前

    可能重复:
    return statement vs exit() in main()

    我刚读了 Accelerated C++ (看起来像一本很棒的书),最后作者说

    但是,明确地包括从main返回是一个好的实践`

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

    5 回复  |  直到 9 年前
        1
  •  4
  •   Michael Burr    15 年前

    在C99和C++中,如果程序的执行达到了 main() 函数然后隐式 return 0; 被处决。C90的情况不是这样的-到了 主() 没有明确的 return 将导致返回一个不确定的值(严格地说,行为是未定义的)。

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

        2
  •  7
  •   Peter G. McDonald    15 年前

    有几个原因,

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

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

        3
  •  1
  •   Mark Ransom    15 年前

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

    从程序中有一个单独的退出点是放置断点的好地方。

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

        4
  •  1
  •   sbi    15 年前

    我认为这条经验法则不太适用于胼胝 exit() 相反,却要掉下来 main() 不返回任何内容,依赖于 return 0 在这种情况下,运行时系统必须这样做。

    我想是的 主() 是唯一可以省略显式返回值的函数。国际海事组织,这是一个很好的理由,不依赖这条规则。

        5
  •  -1
  •   Bojan Komazec    15 年前

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

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