有人能告诉我吗?在C语言中,exit(0)
和exit(1)
有什么区别?
exit(0)
和exit(1)
在C语言中有何不同?
exit(0)
表示程序成功终止并且完全可移植,而exit(1)
(通常)表示终止失败。但是,它的使用是非可移植的。
请注意,C标准定义了EXIT_SUCCESS
和EXIT_FAILURE
来返回C程序的终止状态。
0
和EXIT_SUCCESS
是标准指定的值,用于指示成功终止,然而,只有EXIT_FAILURE
是用于返回失败终止的标准值。在许多实现中,1
被用于相同目的。
参考资料:
C99标准:7.20.4.3 exit
函数
第5段
最后,控制权将返回给主机环境。如果状态的值为零或
EXIT_SUCCESS
,则将返回一种实现定义的形式表示成功终止的状态。如果状态的值为EXIT_FAILURE
,则返回一种实现定义的形式表示未成功终止的状态。否则,返回的状态是实现定义的。
exit
在C语言中接受一个表示退出状态的整数。
通常,状态码为0被认为是成功的,或者是由程序成功执行引起的有意退出。
状态码为1被认为是失败的,通常意味着程序必须退出,因为某些原因无法在正常的程序流程中成功完成所有操作。
这里有一个GNU资源讨论退出状态。
正如@Als所述,应使用两个常量来代替0和1。
EXIT_SUCCESS
被标准定义为零。
虽然标准没有限制EXIT_FAILURE
必须是1,但许多系统确实将其实现为1。
exit(0)
表示程序没有出现错误结束。 exit(1)
表示出现了错误.
你可以使用不同于1
的值来区分不同类型的错误。
区别在于前一种情况返回给环境的值为0
,而后一种情况返回的值为1
:
$ ./prog_with_exit_0
$ echo $?
0
$
并且
$ ./prog_with_exit_1
$ echo $?
1
$
exit
函数参数使用的宏值EXIT_SUCCESS
和EXIT_FAILURE
是实现定义的,但通常分别设置为0
和非零数字(POSIX要求EXIT_SUCCESS
为0)。因此,exit(0)
通常表示成功,而exit(1)
表示失败。main
函数中使用带参数的exit
函数调用等效于带相同参数的return
语句。退出函数
。在C语言中,退出函数会调用所有注册了atexit的函数并终止程序。
exit(1)
表示程序(进程)以失败结束。
文件缓冲区被刷新,流被关闭,临时文件被删除
exit(0)
表示程序(进程)以成功结束。
exit是一个系统调用,用于结束调用它的正在运行的进程。exit函数的参数用于向父进程通知子进程的状态。因此,exit(0)经常被用来表示进程成功执行,而exit(1)则表示出现错误。参考链接
exit(0)等效于exit(EXIT_SUCCESS)。
exit(1)等效于exit(EXIT_FAILURE)。
通常,当进程退出失败时,会返回任何正值,您可以通过使用$?在shell中找到它。
大于128的值是由信号引起的终止。因此,如果任何shell命令被信号终止,则返回状态必须为(128+信号编号)。
例如:
如果任何shell命令被SIGINT终止,则$?将给出130(128+2) (这里的2是SIGINT的信号编号,请使用kill -l进行检查)
exit(0)
表示程序(进程)正常成功终止。
exit(1)
表示程序(进程)正常不成功终止。
如果您想观察这个问题,您必须了解 Unix 中的信号处理和进程管理...
了解 sigaction
、watipid()
等 API ...
exit(0)
在main()
函数中的行为类似于return 0
,而exit(1)
的行为类似于return 1
。标准规定,如果程序成功结束,则main
函数应该返回0
,而非零值表示程序以某种错误终止。
exit(0)
通常表示一切正常,而exit(1)
表示出现了问题。
EXIT_FAILURE
)是不足够的。 - Konrad Rudolphexit
的可移植性是你最不需要担心的(见鬼,甚至可能没有C库可用。没有什么是可移植的!!!111)。 - Cat Plus Plusexit
表示成功。exit(0)
被视为特殊情况,以符合C规范。是的,POSIX是一个标准,但并不是所有系统都符合它。如果您想编写假定符合POSIX的代码,则可以这样做,但这会限制您的代码的可移植性。 - Keith Thompson