我刚读
ISO / IEC 9899:201x委员会草案-2011年4月12日
在其中我发现5.1.2.2.3程序终止
..reaching the } that terminates the main function returns a value of 0.
这表示如果您未在中指定任何return语句main(),并且如果程序成功运行,则main的右大括号}将返回0。
main()
但是在下面的代码中,我没有指定任何return语句,但是它没有返回0
#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); }
编译
gcc test.c ./a.out sum is 15 echo $? 9 // here it should be 0 but it shows 9 why?
该规则是在C标准的1999版本中添加的。在C90中,返回的状态未定义。
您可以通过传递-std=c99给gcc 来启用它。
-std=c99
附带说明一下,有趣的是返回了9,因为它的返回值printf只是写了9个字符。
printf