说我们有这个程序:
int main(int argc, char** argv){
if(argc < 3){
printf("usage details\n");
return EXIT_FAILURE;
}
dostuff();
return EXIT_SUCCESS;
}
我也见过这个:
int main(int argc, char** argv){
if(argc < 3){
printf("usage details\n");
exit(EXIT_FAILURE);
}
dostuff();
exit(EXIT_SUCCESS);
}
根据 ISO / IEC 9899:1989(C90):
标准定义了3个严格符合要求的返回值(即&gt;不依赖于实现定义的行为):0和EXIT_SUCCESS用于成功的&gt;终止,以及EXIT_FAILURE用于不成功的终止。任何其他值都是非标准的和实现定义的。 main必须在&gt;末尾有一个显式的return语句,以避免未定义的行为。
另外,根据 ISO / IEC 9899:2011 :
5.1.2.2.3程序终止
如果main函数的返回类型是与int兼容的类型,则从&gt;初始调用返回main函数等效于调用exit函数,其中main函数返回的&gt;值作为其参数; 11)到达}终止&gt;主函数返回值0.如果返回类型与int不兼容,则>>未指定返回到主机环境的终止状态。
它声明从main返回等同于使用相同的返回值调用exit。
话虽如此,问题是: 这是否重要,无论您是从main返回并让它为您调用exit,还是从main
退出答案 0 :(得分:2)
作为终止程序的方法,return
和exit
密切相关。事实上,声明
return EXIT_SUCCESS;
main
中的相当于
exit (EXIT_SUCCESS);
return
和exit
之间的区别在于exit
导致程序终止,无论哪个函数调用它。 return
语句仅在main
函数中出现时才会终止程序。