一尘不染

为什么main在这里不返回0?

linux

我刚读

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。

但是在下面的代码中,我没有指定任何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?

阅读 231

收藏
2020-06-03

共1个答案

一尘不染

该规则是在C标准的1999版本中添加的。在C90中,返回的状态未定义。

您可以通过传递-std=c99给gcc 来启用它。

附带说明一下,有趣的是返回了9,因为它的返回值printf只是写了9个字符。

2020-06-03