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

可能重复:
返回0隐式
为什么返回0是可选的?

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

例如:

 #include 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); } 

因为编译器会为您添加隐式exit

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

C99标准:

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

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

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

5.1.2.2.3程序终止

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

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

3.6.6.4退货声明

到达终止函数的}等同于执行不带表达式的return语句。

2.1.2.2托管环境

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

因为如果执行终止而没有它假定它成功,即返回0。

小学,如果你不使用Flags,你的编译器不会告诉你任何事情。

如果你使用严重的旗帜,你的编译器会告诉你每一个小小的遗漏细节。

返回一些东西很重要,启动你的程序可以通知你的程序是成功还是不执行。 如果您的程序没有返回任何内容(默认情况下为0),例如,启动它的终端将认为即使失败也能正常工作。

因为编译器会为您添加它。

在unix / linux上你可以尝试这个小脚本:

retval.sh

 #!/bin/sh $1 echo $? 

然后通过它运行您的程序:

 ./retval.sh yourprogram 

它将输出程序的返回值。 即使你没有添加return,你也会看到main(),exit()会返回一个整数值。