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

  • 本文关键字:不需要 返回 语句 main c
  • 更新时间 :
  • 英文 :


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

为什么即使不使用 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);
}

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

5.1.2.2.3程序终止

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

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

3.6.6.4返回语句

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

2.1.2.2托管环境

如果主函数执行没有值的返回,则 返回到主机环境的终止状态不确定。

,因为编译器为您添加了隐式exit

请检查为什么原因;我仍然强烈建议您使用有意义的返回代码进行明确的退出/返回。

C99标准:

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

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

,因为如果执行终止,则假定其成功,即返回0。

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

如果您使用严重的旗帜,您的编译器将告诉您所有丢失的细节。

返回某事很重要,可以在您的程序的成功执行或不执行程序的情况下告知您的程序。如果您的程序什么都没有返回(默认情况下为0),例如,您启动的终端也将假定即使失败也可以正常工作。

,因为编译器为您添加了。

在UNIX/Linux上,您可以尝试此小脚本:

retval.sh

#!/bin/sh
$1
echo $?

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

./retval.sh yourprogram

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

最新更新