在我的编程书中,它显示了不使用任何参数的出口(exit();
)。遗憾的是,它不起作用。
有的人说用exit(0);
,有的人说用exit(1); exit(2);
和exit(3)
;它们之间有什么区别,甚至有exit(4);
吗?
有趣的是,我的编译器不需要stdlib.h
来执行exit(0);
和其他的。
void exit( int exit_code );
这里,exit_code
是程序的退出状态。调用此函数后,控制权将返回给主机环境。如果exit_code
为EXIT_SUCCESS
,则返回一个实现定义的状态,表示终止成功。如果exit_code
为EXIT_FAILURE
,则返回一个实现定义的状态,表示终止失败。在其他情况下,返回实现定义的状态值。
点击这里查看更多信息。
注::编译器不需要stdlib.h
来执行exit(0);
的原因可能是它已经被包含在代码中的其他头包含,或者,正如@devnull所提到的,在使用gcc
构建exit()
是内置函数之一时。
有趣的是我的编译器不需要stdlib.h来执行退出(0),其余的
你似乎在使用gcc
。exit
是gcc提供的内置函数之一,因此您不需要指定头文件。
传递给exit()
的参数表示终止状态
在1999年版本的ISO C标准之前,调用没有可见声明的函数是合法的。编译器将假设函数存在,从而创建隐式声明。(它还会假设它返回int
类型的结果,而exit()
不是。)如果此隐式声明与函数的实际定义不匹配,则该行为未定义。
在1999年的标准中,"隐式int
"规则被删除了,没有可见声明的调用(在这种情况下,由#include <stdlib.h>
提供)无效。即使它是无效的,编译器仍然可以发出非致命警告并根据旧规则处理它;
在任何版本的语言中,exit
都需要一个int
类型的参数。传递0
或EXIT_SUCCESS
(<stdlib.h>
中定义的宏)将导致程序终止,并向环境传递一个表示成功的状态。传递EXIT_FAILURE
将导致程序以失败状态终止。
C语言没有指定其他参数值的含义。您通常会看到exit(1)
表示失败,但这不是完全可移植的。
(exit
可能是gcc中的某种内置函数,但这并不影响语言的规则;在没有可见声明的情况下调用exit
或者在没有int
参数的情况下调用它仍然是无效的。如果它是内置的,那么这可能会影响诊断消息中的详细级别。
exit(0)
和0
是由进程发送的,如果它已经正确结束。其他数字在产生退出并出现某种错误时使用。
同时允许父进程使用waitpid
捕获其子进程的退出信号:
-
,如果你让进程并发结束:
while(waitpid(1,&exit_code,0) > 0)
,其中exit_code
是一个整数,获得完成进程的退出代码 -
或者这样:
waitpid(-1,NULL,0)
如果你让它们顺序完成
如果您将此代码放在waitpid
之后或waitpid
的循环中,则可以获得子进程的退出状态:
pid = waitpid(-1, &exit_code, 0); //getting the finished process' PID
if (WIFEXITED(exit_code)) {
int statcode = WEXITSTATUS(exit_code);
printf(“Process with PID %d has finished with status %d, pid, statcode);
}
如果您想确保exit()
工作,请尝试此操作
使用