【问题标题】:Using return vs return 0 for main function in c在c中使用return vs return 0作为主函数
【发布时间】:2014-03-15 19:48:26
【问题描述】:

在我关于 C 的书中,作者通常将main() 格式化为:

main()
{
     /* Some code */
     return;
}

但有时,他会像这样格式化main()

main()
{
     /* Some code */
     return 0;
}

有什么区别?有关系吗?

【问题讨论】:

  • 返回 0;意味着程序成功退出并且至少在(unix)中退出,而 return 只是终止程序而不管它的状态。在 void 函数中,它是一个出口点
  • 告诉我们它是什么书,这样我们就可以确保没有人买它,它是在教授非标准做法。
  • 我正在使用 C By Example。它来自 80 年代的某个地方,所以如果标准发生变化,我不会感到惊讶。它甚至不谈论 GUI 或图形。
  • 旧版本的C 允许像这样声明main。永远不要用新代码编写它。 (一个罕见的例外是 C 标准允许实现指定可接受的替代声明 main,而嵌入式 C 实现可能会这样做。)

标签: c return main


【解决方案1】:

C 标准这么说(草案n1570

5.1.2.2.1 程序启动

程序启动时调用的函数名为main。实现声明没有 这个函数的原型。 应定义为返回类型int,并且没有 参数:

int main(void) { /* ... */ }

或带有两个参数(此处称为argcargv,尽管可以是任何名称 使用,因为它们在声明它们的函数中是本地的):

int main(int argc, char *argv[]) { /* ... */ }

或等价物;10) 或以其他一些实现定义的方式。

现在,如果函数的返回类型不是void,那么你必须使用

return exp;

如果它的返回类型是void那么你可以使用(不是必须的)

return;  

如果是main,您可以使用return 0;,但C99 允许您省略return 语句。

【讨论】:

  • 这解释了很多。我的书有点旧了,我猜main() 在写的时候不必输入int
  • Turbo C++ 这样的编译器(非常老旧过时)支持void main 定义。在较旧的 C 中,如果缺少函数的返回类型,则它会隐式转换为 int。但 C99 及更高版本放弃了此功能。
【解决方案2】:

首先,main 应声明为:

int main(void)

int main(int argc, char *argv[]) 

带有命令参数的版本有一些变体,例如int main(int argc, char **argv)

它必须返回int 以符合标准。因此,如果程序正常运行,您必须在最后返回intreturn 0

请注意,在 C99 或更高版本中,您可以省略 return 0。如果main执行到最后,return 0是隐式的。

【讨论】:

    【解决方案3】:

    返回值指示环境(未)成功完成,允许所述环境监视它而不是解析打印的消息。 - 见this question.

    您应该在main 中使用return 0,并带有正确声明的main 函数。在声明为void 的函数中,您可以只使用不带值的return,或者让它从末尾脱落(不要使用return 语句)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 2020-02-18
      • 2014-05-01
      相关资源
      最近更新 更多