为什么main()不需要return语句?

fre*_*015 0 c

可能重复:
return 0 implicit
为什么return 0是可选的?

为什么C中的main()函数可以正确终止,即使不使用exitreturn

例如:

#include<stdio.h>

int sum(int a,int b)
{
 return (a + b);
}

int main()
{
 int a=10;
 int b=5;
 int ans;    
 ans=sum(a,b);
 printf("sum is %d",ans);
}
Run Code Online (Sandbox Code Playgroud)

Fin*_*fin 11

因为编译器exit为您添加了隐含的内容.

检查一下nightcracker的原因; 我强烈建议您使用有意义的返回代码进行显式退出/返回.

C99标准:

如果main函数的返回类型是与int兼容的类型,则从初始调用到main函数的返回等同于调用exit函数,其中main函数返回的值作为其参数; 10)到达}终止main函数返回值0.如果返回类型与int不兼容,则返回到主机环境的终止状态未指定.

我正在寻找要检查的C89文本.


orl*_*rlp 11

这是因为C99和C11标准如此说:

5.1.2.2.3程序终止

到达该}终止main函数将返回值0.如果返回类型不兼容int,则返回到主机环境的终止状态未指定.

但是,您应该添加一个return语句.这是因为在C89中返回的值是未定义的,否则!

3.6.6.4退货声明

到达}那个终止函数等同于执行没有表达式的return语句.

2.1.2.2托管环境

如果main函数执行不指定值的返回,则返回到主机环境的终止状态是未定义的.

  • 并且为了记录,C99和C11在这个问题上是完全相同的. (4认同)
  • 这看起来是唯一明智的答案。 (2认同)