EXIT_FAILURE与exit(1)的区别?

问题描述 投票:58回答:5

有什么区别?哪个是首选,或者说我应该分别在什么时候使用?

c exit
5个回答
61
投票

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

只有 EXIT_FAILURE 是返回不成功终止的标准值,但 1 在很多实现中也是这样使用的。


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

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

请注意: EXIT_SUCCESS0 都是一样的。


参考文献:C99标准:7.20.4.3

C99标准:7.20.4.3。exit 功能 第5段

最后,将控制权交还给主机环境。如果状态的值是 zeroEXIT_SUCCESS,返回状态成功终止的实现定义形式。如果状态的值是 EXIT_FAILURE的状态,返回的是一个执行完毕的状态不成功终止的形式。否则,返回的状态是由实现决定的。


12
投票

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

从实际情况来看。 典型的系统也接受其他值。如果记忆没错的话,Linux会让你返回任何8位的值,Windows则是16位的值。除非你真的可能关心移植到IBM大型机、VMS等,否则你有可能不会关心大多数系统,因为这些系统至少不会支持8位的返回值。


5
投票

使用 EXIT_FAILURE. 这是一个在整个操作系统中使用的常数。它的值可以是比1更多的东西,而且它在代码中也更有描述性。


1
投票

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

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


0
投票

不仅VMS有自己的规则,AmigaDOS也将返回码低于5定义为okay。

© www.soinside.com 2019 - 2024. All rights reserved.