为什么main()不需要return语句?
可能重复:
返回0隐式
为什么返回0是可选的?
为什么即使不使用exit
或return
,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()会返回一个整数值。