C语言中的exit(0)和exit(1)有什么区别?


96

谁能告诉我?exit(0)exit(1)C语言有什么区别?

Answers:


117

exit(0)exit(1)C语言有什么区别?

exit(0)表示程序成功终止,并且可以完全移植;而
exit(1)(通常)表示程序终止不成功。但是,它的用法是不可移植的。

请注意,C标准定义EXIT_SUCCESSEXIT_FAILURE从C程序返回终止状态。

0EXIT_SUCCESS是标准指定的用于指示成功终止的值,但是,仅EXIT_FAILURE是用于返回未成功终止的标准值。1虽然在许多实现中都用于相同的功能。


参考:

C99标准:7.20.4.3 exit函数
第5段

最后,控制权返回到主机环境。如果status的值为零或 EXIT_SUCCESS,则返回状态成功终止的实现定义形式。如果status的值为EXIT_FAILURE,则返回实现定义的状态失败成功终止的形式。否则,返回的状态将由实现定义。


1
您能解释一下不可移植性吗?特别是,非零退出代码表示不同的故障模式。应用程序通常使用它来提供更多信息。EXIT_FAILURE因此,单个常数()是不够的。
康拉德·鲁道夫2012年

@KonradRudolph:我添加了相关的引文。希望能有所帮助。
Alok Save

1
@Als:POSIX是一个标准。C标准可能会说“实现定义的”,但是当实现实际上确实同意约定时,这并不等于说“不可移植” 。
Cat Plus Plus

1
@PeterM:找到一个不使用此约定的平台。这很可能是一些专门/嵌入式/独立式/任何环境下,便携性exit是至少您的问题(地狱,有可能甚至一个C库可用那里。没有什么是便携式!!! 111)。
Cat Plus Plus

3
@CatPlusPlus:在OpenVMS上,调用任何奇exit数值表示成功。exit(0)出于C一致性的考虑,被视为特殊情况。是的,POSIX是一个标准,但并非所有系统都符合它。如果您要编写假定使用POSIX的代码,则可以随意这样做,但这会限制代码的可移植性。
基思·汤普森

12

exit 用C语言表示的整数表示退出状态。

退出成功

通常,将退出状态0视为成功,或者将其视为由程序成功执行导致的有意退出。

退出失败

退出状态1被认为是失败,最常见的是意味着该程序由于某种原因不得不退出,并且无法成功完成正常程序流中的所有操作。

这是一个有关退出状态的GNU资源


如@Als所述,应使用两个常量代替0和1。

EXIT_SUCCESS 由标准定义为零。

EXIT_FAILURE 不受标准限制为一体,但是许多系统确实将其实现为一体。


9

exit(0)表示程序已终止,没有错误。exit(1)表示存在错误。

除了1区分不同类型的错误之外,还可以使用其他值。


3

区别在于0在前1一种情况下和后一种情况下返回到环境的值:

$ ./prog_with_exit_0
$ echo $?
0
$

$ ./prog_with_exit_1
$ echo $?
1
$

还要注意,宏的值 EXIT_SUCCESSEXIT_FAILURE用作exit函数的参数是实现定义的,但通常分别设置为0和非零数。(POSIX要求EXIT_SUCCESS为0)。因此通常exit(0)意味着成功和exit(1)失败。

exit函数中带有参数的函数调用main等效于return带有相同参数的语句。


2

exit是一个系统调用,用于完成正在运行的进程,并从该进程中进行调用。退出参数用于通知父进程有关子进程的状态。因此,exit(0)可以用来(并且经常使用)指示进程的成功执行,而exit(1)可以标记错误。参考链接


1

exit(0)表现得像return 0main()功能,exit(1)表现得像return 1。标准是该main函数return 0,如果程序成功结束而非零值则意味着程序因某种错误而终止。


1

exit(0)等效于exit(EXIT_SUCCESS)。

exit(1)等效于exit(EXIT_FAILURE)。

失败时,通常会返回任何正值以退出该过程,您可以使用$?在shell上找到该值。

值大于128,这是由信号引起的。因此,如果有任何以信号终止的shell命令,则返回状态必须为(128+信号编号)。

例如:

如果任何shell命令被SIGINT终止,则$?将给出130(128 + 2)(这里2是SIGINT的信号编号,请使用kill -l检查)


0

可执行文件结束(退出)时,它会向运行它的外壳返回一个值。exit(0)通常表示一切都很好,而exit(1)表示某些事情已经不对劲。



0

exit(0) 表示程序(进程)正常成功终止。

exit(1) 表示程序(进程)通常无法成功终止。

如果您想观察这件事,您必须了解Unix中的信号处理和过程管理。

知道sigactionwatipid()..for()...诸如此类... API ...........


0

exit function。在C编程语言中,出口函数调用在出口处注册的所有函数,并终止程序。

exit(1)表示程序(进程)未成功终止。 刷新文件缓冲区,关闭流,并删除临时文件

exit(0) 表示程序(进程)成功终止。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.