这是一个简单的问题,但我一直看到相互矛盾的答案:C++ 程序的主例程应该返回 0
还是 EXIT_SUCCESS
?
#include <cstdlib>
int main(){return EXIT_SUCCESS;}
或者
int main(){return 0;}
它们是完全一样的吗? EXIT_SUCCESS
应该只与 exit()
一起使用吗?
我认为 EXIT_SUCCESS
会是更好的选择,因为其他软件可能希望将零视为失败,但我还听说如果您返回 0
,编译器能够将其更改为反正价值不一样。
原文由 Trevor Hickey 发布,翻译遵循 CC BY-SA 4.0 许可协议
EXIT_FAILURE
,无论是在 --- 的 return 语句中,还是作为 —exit()
main
的参数,都是在 C 或 C++ 程序中指示失败的唯一可移植方式。例如,exit(1)
实际上可以在 VMS 上发出成功终止的信号。如果您要在程序失败时使用
EXIT_FAILURE
,那么您最好在程序成功时使用EXIT_SUCCESS
,只是为了对称。另一方面,如果程序从不发出失败信号,您可以使用
0
或EXIT_SUCCESS
。标准保证两者都表示成功完成。 (几乎不可能EXIT_SUCCESS
的值不是 0,但在我听说过的每个实现中它都等于 0。)Using
0
has the minor advantage that you don’t need#include <stdlib.h>
in C, or#include <cstdlib>
in C++ (if you’re using areturn
声明而不是调用exit()
) -- 但是对于任何重要规模的程序,无论如何您都将直接或间接地包含 stdlib。就此而言,在从 1999 年标准开始的 C 和所有版本的 C++ 中,到达
main()
的结尾会隐含return 0;
无论如何,所以你可能不需要使用任何一个0
或EXIT_SUCCESS
明确。 (但至少在 C 语言中,我认为明确的return 0;
是更好的风格。)(有人问过 OpenVMS。我很久没有使用它了,但我记得奇数状态值通常表示成功,而偶数值表示失败。C 实现映射
0
到1
,所以return 0;
表示成功终止。其他值不变传递,所以return 1;
也表示成功终止EXIT_FAILURE
将具有非零偶数值.)