为什么即使不使用exit
或return
,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);
}
答案 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()将返回一个整数值。