EXIT_FAILURE vs exit(1)?
有什么不同? 哪一个是最好的,或者我应该什么时候分别使用每一个?
exit(1)
(通常)表示不成功终止。 但是,它的使用是不可移植的。 例如,在OpenVMS上 , exit(1)
实际上表示成功。
只有EXIT_FAILURE
是返回不成功终止的标准值,但在许多实现中, 1
用于相同的值。
所以总结一下:
如果你想写完全便携式的代码使用,
EXIT_FAILURE
表示失败。 而,
您可以使用exit(0)
或EXIT_SUCCESS
成功案例。
请注意, EXIT_SUCCESS
或0
都是相同的。
参考:
C99标准:7.20.4.3 exit
function
第5段
最后,控制权返回到主机环境。 如果状态值
zero
或EXIT_SUCCESS
,则返回状态成功终止的实现定义forms。 如果状态值为EXIT_FAILURE
,则返回状态不成功终止的实现定义forms。 否则,返回的状态是实现定义的。
对于真正的便携式代码, EXIT_FAILURE
是首选。 C标准只定义了三个值的含义: EXIT_FAILURE
, 0
和EXIT_SUCCESS
(其中0
和EXIT_SUCCESS
基本上是同义的)。
从实践的angular度来看, 大多数典型的系统也接受其他的价值观。 如果内存服务,Linux将让您返回任何8位值和Windows 16位值。 除非您诚实地关心移植到IBM大型机,VMS等,否则您可能不关心大多数不支持至less8位返回值的系统。
使用EXIT_FAILURE
。 这是一个在整个操作系统中使用的常量。 它的价值可能不是1而且在代码中更具描述性。
对于某些程序应该返回什么样的状态值有一些约定。 最常见的约定是成功0和失败1。 执行比较的程序使用不同的约定:它们使用状态1表示不匹配,状态2表示无法比较。 如果现有的惯例对它有意义的话,你的程序应该遵循现有的约定。
一些非POSIX系统对退出状态值使用不同的约定。
For greater portability
,您可以分别使用macrosEXIT_SUCCESS
和EXIT_FAILURE
作为常规状态值来获得成功和失败。 它们在文件stdlib.h中声明。