为什么main()函数不需要返回语句?

3
可能重复:

可能重复:
隐式return 0是什么意思?
为什么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);
}

@freeboy1015 只需如Ed所指出的那样,如果你的问题得到了满意的回答,请点击最合适的答案旁边的勾选标记。您可以通过点击个人资料然后进入“问题”来查看以前的问题。 - undefined
5个回答

16

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

5.1.2.2.3 程序终止

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

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

3.6.6.4 返回语句

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

2.1.2.2 Hosted environment

如果主函数执行了一条不指定值的返回语句,则返回给主机环境的终止状态是未定义的。


2
这似乎是唯一明智的答案。 - undefined
5
记录一下,C99和C11在这个问题上完全相同。 - undefined

12
因为编译器会为您添加一个隐含的 exit
查看 nightcracker 的原因;但我强烈建议您使用有意义的返回代码进行显式退出/返回。
C99 标准:
如果 main 函数的返回类型与 int 兼容,则从 main 函数的初始调用返回等效于使用 main 函数返回的值作为其参数调用 exit 函数;到达终止 main 函数的 } 返回值 0。如果返回类型不兼容于 int,则返回给主机环境的终止状态是未指定的。
我正在寻找 C89 文本进行检查。

C89和C99在这里是不同的,对吧? - undefined
1
@Kirilenko 是的,在 C89 中,你 必须 使用 return(我甚至不确定使用 exit 而不是 return 是否符合规范)。另一方面,在 C99 中,你 必须 声明 main 的返回 _类型_。 - undefined

0

因为编译器会自动添加它。

在Unix/Linux上,你可以尝试这个小脚本:

retval.sh

#!/bin/sh
$1
echo $?

然后通过它运行你的程序:
./retval.sh yourprogram

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


0
因为如果执行终止时没有返回值,它会默认执行成功,即返回0。

0
首先,如果你不使用标志(Flags),你的编译器将不会告诉你任何信息。
如果你使用严格的标志,你的编译器将告诉你每一个微小的缺失细节。
返回结果是很重要的,启动你的程序的程序可以了解你的程序是否成功执行。如果你的程序没有返回任何内容(默认为0),例如,在你启动它的终端上,即使它失败了,也会假设它正常运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接