2

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

为什么 C 中的 main() 函数即使不使用exitor也可以正确终止return

例如:

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

5 回答 5

13

这是因为 C99 和 C11 标准是这样说的:

5.1.2.2.3 程序终止

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

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

3.6.6.4 返回语句

到达}终止函数的方法等同于在没有表达式的情况下执行 return 语句。

2.1.2.2 托管环境

如果主函数执行一个没有指定值的返回,返回给宿主环境的终止状态是未定义的。

于 2012-11-05T13:15:01.877 回答
11

因为编译器exit为你添加了一个隐式。

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

C99标准:

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

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

于 2012-11-05T13:08:53.400 回答
0

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

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

retval.sh

#!/bin/sh
$1
echo $?

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

./retval.sh yourprogram

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

于 2012-11-05T13:19:12.917 回答
0

因为如果执行终止而没有任何一个它假定它是成功的,即返回 0。

于 2012-11-05T13:09:30.500 回答
0

主要的是,如果您不使用标志,您的编译器将不会告诉您任何信息。

如果你使用严重的标志,你的编译器会告诉你每一个缺失的细节。

返回一些东西很重要,启动你的程序可以被告知你的程序是否执行成功。如果您的程序不返回任何内容(默认为 0),例如,您启动它的终端将假定它即使失败也能正常运行。

于 2012-11-05T13:11:45.650 回答