有什么区别?哪个是首选,或者说我应该分别在什么时候使用?
exit(1)
通常)表示不成功的终止。但是,它的用法是不可移植的。例如,在 OpenVMS, exit(1)
实际上表示成功。
只有 EXIT_FAILURE
是返回不成功终止的标准值,但 1
在很多实现中也是这样使用的。
所以总结一下。如果你想写出完美的可移植的代码,请使用:
EXIT_FAILURE
对于失败的情况。而您可以使用 exit(0)
或 EXIT_SUCCESS
为成功案例。
请注意: EXIT_SUCCESS
或 0
都是一样的。
参考文献:C99标准:7.20.4.3
C99标准:7.20.4.3。exit
功能 第5段
最后,将控制权交还给主机环境。如果状态的值是
zero
或EXIT_SUCCESS
,返回状态成功终止的实现定义形式。如果状态的值是EXIT_FAILURE
的状态,返回的是一个执行完毕的状态不成功终止的形式。否则,返回的状态是由实现决定的。
对于真正可移植的代码。EXIT_FAILURE
是首选。C标准只定义了三个值的含义。EXIT_FAILURE
, 0
和 EXIT_SUCCESS
(有 0
和 EXIT_SUCCESS
基本上是同义词)。)
从实际情况来看。最 典型的系统也接受其他值。如果记忆没错的话,Linux会让你返回任何8位的值,Windows则是16位的值。除非你真的可能关心移植到IBM大型机、VMS等,否则你有可能不会关心大多数系统,因为这些系统至少不会支持8位的返回值。
使用 EXIT_FAILURE
. 这是一个在整个操作系统中使用的常数。它的值可以是比1更多的东西,而且它在代码中也更有描述性。
某些程序应该返回什么样的状态值是有约定的。最常见的约定是0代表成功,1代表失败。执行比较的程序使用不同的约定:他们使用状态1表示不匹配,状态2表示无法比较。你的程序应该遵循现有的约定,如果一个现有的约定对它来说是有意义的。
一些非POSIX系统对退出状态值使用不同的约定。
For greater portability
你可以使用宏EXIT_SUCCESS
和EXIT_FAILURE
分别代表传统的成功和失败的状态值。它们被声明在文件stdlib.h中。
不仅VMS有自己的规则,AmigaDOS也将返回码低于5定义为okay。