EXIT_FAILURE vs退出(1)?

时间:2012-12-02 07:39:47

标签: c exit

有什么区别?哪个是首选,或者何时应该分别使用每个?

5 个答案:

答案 0 :(得分:53)

exit(1)(通常)表示终止失败。但是,它的使用是不可移植的。例如,在OpenVMS上,exit(1)实际上表示成功。

只有EXIT_FAILURE是返回不成功终止的标准值,但1在许多实现中都使用EXIT_FAILURE


总结一下:
如果你想编写完全可移植的代码,

exit(0)表示失败案例。虽然,
您可以使用EXIT_SUCCESSEXIT_SUCCESS来表示成功案例。

请注意,0exit都相同。


参考:

C99标准:7.20.4.3 zero功能
第5段

  

最后,控制权返回给主机环境。如果状态值为EXIT_SUCCESS或   EXIT_FAILURE,状态成功终止的实现定义形式   回。如果状态值为{{1}},则为实现定义形式   返回状态不成功的终止。否则返回的状态是   实施德音响定义

答案 1 :(得分:11)

对于真正可移植的代码,首选EXIT_FAILURE。 C标准仅定义了三个值的含义:EXIT_FAILURE0EXIT_SUCCESS0EXIT_SUCCESS基本上是同义词。)

从实际角度来看,大多数典型系统也接受其他值。如果内存服务,Linux将允许您返回任何8位值和Windows 16位值。除非您真诚地关心移植到IBM大型机,VMS等,否则您可能不关心大多数不支持至少8位返回值的系统。

答案 2 :(得分:4)

使用EXIT_FAILURE。它是整个操作系统中使用的常量。它的值可能不是1而且在代码中更具描述性。

答案 3 :(得分:1)

某些程序应该返回哪些状态值的约定。最常见的约定是0表示成功,1表示失败。执行比较的程序使用不同的约定:它们使用状态1表示不匹配,而状态2表示无法比较。如果现有的约定对它有意义,你的程序应该遵循现有的约定。

  

某些非POSIX系统对退出状态使用不同的约定   值。 For greater portability,您可以使用宏EXIT_SUCCESS   和EXIT_FAILURE表示成功的传统状态值   失败,分别。它们在文件stdlib.h中声明。

答案 4 :(得分:0)

不仅VMS有自己的规则,AmigaDOS还将5以下的返回码定义为可以。