为什么main()不需要return语句?

时间:2012-11-05 13:07:00

标签: c

  

可能重复:
  return 0 implicit
  Why is return 0 optional?

为什么即使不使用exitreturn,C中的main()函数也能正确终止?

例如:

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

5 个答案:

答案 0 :(得分:11)

因为编译器会为您添加隐式exit

检查夜间故事的原因;我强烈建议您使用有意义的返回代码进行显式退出/返回。

C99标准:

  

如果main函数的返回类型是与int兼容的类型,   从初始调用到main函数的返回相当于   使用main函数返回的值调用exit函数   作为其论点; 10)到达终止主要功能的}   返回值0.如果返回类型与int不兼容,   返回到主机环境的终止状态是   未指定的。

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

答案 1 :(得分:9)

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

  

5.1.2.2.3程序终止

     

到达终止}功能的main   返回值0.如果返回类型与int不兼容,   返回到主机环境的终止状态未指定。

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

  

3.6.6.4退货声明

     

到达终止函数的}等同于执行a   没有表达式的return语句。

     

2.1.2.2托管环境

     

如果main函数执行一个不指定值的返回,则为   返回到主机环境的终止状态未定义。

答案 2 :(得分:0)

因为如果执行终止而没有它假定它成功,即返回0。

答案 3 :(得分:0)

小学,如果你不使用Flags,你的编译器将不会告诉你任何事情。

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

返回一些内容非常重要,启动您的程序可以通知您的程序是成功还是不执行。如果您的程序没有返回任何内容(默认情况下为0),例如,启动它的终端将认为即使失败也能正常工作。

答案 4 :(得分:0)

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

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

retval.sh

#!/bin/sh
$1
echo $?

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

./retval.sh yourprogram

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