62

有什么不同?哪个是首选,或者我应该什么时候分别使用每个?

4

5 回答 5

75

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

OnlyEXIT_FAILURE是返回不成功终止的标准值,但1在许多实现中用于相同的值。


所以总结一下:
如果你想编写完美的可移植代码使用,

EXIT_FAILURE对于失败的情况。同时,
您可以使用exit(0)EXIT_SUCCESS成功案例。

请注意,EXIT_SUCCESS0两者相同。


参考:

C99 标准:7.20.4.3exit功能
第 5段

最后,控制权返回到主机环境。如果 status 的值为zeroEXIT_SUCCESS,则返回成功终止状态的实现定义形式。如果 status 的值为EXIT_FAILURE,则返回状态未成功终止的实现定义形式。否则返回的状态是实现定义的。

于 2012-12-02T07:43:12.360 回答
15

对于真正可移植的代码,EXIT_FAILURE是首选。C 标准仅定义三个值的含义:EXIT_FAILURE0EXIT_SUCCESS(与0EXIT_SUCCESS本质上是同义词)。

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

于 2012-12-02T07:44:36.193 回答
5

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

于 2012-12-02T07:42:00.533 回答
1

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

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

于 2012-12-02T07:43:10.343 回答
0

不仅 VMS 有自己的规则,AmigaDOS 还定义了低于 5 的返回码是可以的。

于 2020-06-02T08:58:24.167 回答