【问题标题】:When should I end a C++ program with 'return 0'? [duplicate]我什么时候应该用'return 0'结束一个 C++ 程序? [复制]
【发布时间】:2014-10-18 01:07:51
【问题描述】:

我是 C++ 新手,我正在阅读一本名为 Big C++ 的书。在本书中,到目前为止我看到的所有示例程序都以return 0; 结尾,然后是最后的}。我显然可以让 C++ 程序在没有 return 0; 的情况下运行,所以我想知道它有什么用途。我熟悉从 java 中的方法返回一些东西,但我不明白为什么 int main() 需要在 C++ 中返回 0。更重要的是:我是否应该在 C++ 中始终以 return 0; 结束我的 main()?如果没有,我什么时候需要,什么时候不应该? return 0; 告诉程序做什么?

在一个相关问题中,我假设 C++ 中的 main() 正在设置 main 函数,就像 java 中的 main 方法一样。那是对的吗?为什么 main 方法被声明为整数?这就是int main() { 行中发生的事情吗?

【问题讨论】:

  • 你应该一次只做一个问题。
  • 我编辑了您的问题以删除第二个问题。您应该将其作为一个单独的问题发布。如果您认为我的修改不合理,您可以回滚我的修改。

标签: c++ return main


【解决方案1】:

表示应用程序的exit code

例如,如果您通过某些脚本启动它并且他们想确定程序是否正常终止退出代码应该是0,非零表示某种类型的错误

说到Java

如果你已经指定int作为返回类型,你必须返回否则它不会编译,如果是void类型,它为零,除非jvm抛出异常

【讨论】:

  • 并且没有返回语句意味着隐含的return 0;(仅限main
  • 如果你已经指定int作为返回类型,你必须返回否则它不会编译,如果void类型它是零,除非jvm抛出异常
  • 不,main 有一个例外(注意问题标记为 C++)
  • 之前被标记在Java下
【解决方案2】:

原则上,任何返回不同于void 的函数都必须使用return 语句退出(除非抛出异常):从返回非void 的函数的末尾掉落会导致未定义行为。

C++ 的美妙之处在于一般规则有很多例外:您可以从main() 的末尾脱落,其行为与使用return EXIT_SUCCESS; 相同,而return 0; 又与return 0; 相同。据我所知,这条特殊规则的原因来自遥远的 C 和 C++ 历史(尽管我没有任何可以引用的声明)。总之,虽然您不需要从main() 返回任何东西,但使用合适的return 语句会更加一致。在将代码放在幻灯片上进行演示时,我倾向于省略它,但在实际程序中,我总是包含一个 return 语句。

顺便说一句,如果您想指示 C++ 程序失败,您可能应该返回 EXIT_FAILURE,这是除了 EXIT_SUCCESS 之外唯一保证工作的其他值。实际上,其他返回码也可以使用,但不能保证。

【讨论】:

  • 有来自C++创建者的解释:stroustrup.com/bs_faq2.html#void-main
  • @enedil:请注意,Bjarne 的解释没有解释了为什么可以省略 return 语句!隐含的 int 规则不是一个充分的理由,因为在任何返回 int 的地方都可以省略返回类型,但所有其他函数仍然需要 return 语句。
【解决方案3】:

在 C++ 的情况下,return 0; 是隐含的。那就是:

int main()
{
}

等于

int main()
{
    return 0;
}

请注意,作为应用入口点的 main 是唯一允许您省略非 void 返回类型的 return 语句。

除此之外,该值本身用于通知任何其他进程(例如父进程)有关执行结果,例如通过posix waitpid阅读。

【讨论】:

    【解决方案4】:

    main 方法被声明为一个整数,因为您希望它返回一个。如果 main 方法返回 0,则基本上表示一切正常。

    【讨论】:

      猜你喜欢
      • 2011-06-16
      • 2013-10-31
      • 2016-01-31
      • 2011-07-26
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      相关资源
      最近更新 更多