在我的编程书中,它显示我使用了没有任何参数的退出(exit();
)。
不幸的是它不起作用。
有些人说使用exit(0);
而有些人说exit(1); exit(2);
和exit(3)
;
它们之间有什么区别,甚至还有exit(4);
?
有趣的是,我的编译器不需要stdlib.h
来执行exit(0);
,其余的都是。
答案 0 :(得分:4)
void exit( int exit_code );
此处,exit_code
是程序的退出状态。调用此控件后,控件将返回到主机环境。如果exit_code
为EXIT_SUCCESS
,则返回指示成功终止的实现定义状态。如果exit_code
为EXIT_FAILURE
,则返回实现定义的状态,表示终止失败。 在其他情况下,返回实现定义的状态值。
查看here了解详情。
PS:您的编译器不需要stdlib.h
来执行exit(0);
的原因可能是它已被包含在您的代码中的其他标头包含,或者作为@ devnull提到,使用gcc
构建时exit()
是其中一个内置函数。
答案 1 :(得分:3)
有趣的是我的编译器不需要stdlib.h来执行 退出(0);其余的。
您似乎正在使用gcc
。 exit
是gcc提供的built-in functions之一,因此您不需要指定的标头。
传递给exit()
的参数用于表示终止状态。
答案 2 :(得分:1)
在1999版ISO C标准之前,调用没有可见声明的函数是合法的。编译器将假设函数存在,从而创建一个隐式声明。 (它还假设它返回int
类型的结果,exit()
没有。)如果此隐式声明与函数的实际定义不匹配,则行为未定义。
从1999年标准开始,“隐式int
”规则被删除,没有可见声明的调用(在本例中由#include <stdlib.h>
提供)变得无效。即使它无效,编译器仍可能发出非致命警告并按旧规则处理它; gcc默认执行此操作。
在任何语言版本下,exit
都需要一个int
类型的参数。传递0
或EXIT_SUCCESS
(<stdlib.h>
中定义的宏会导致程序终止并将状态传递给环境,表明成功。传递EXIT_FAILURE
会导致程序终止状态指示失败。
C语言未指定其他参数值的含义。您通常会看到exit(1)
表示失败,但这并非完全可移植。
(exit
可能是gcc中的某种内置函数,但这不会影响语言的规则;如果没有可见的声明,则调用exit
仍然无效,或者在没有int
参数的情况下调用它。如果它是内置的,则可能会影响诊断消息中的详细程度。)
答案 3 :(得分:0)
exit(0)
的{p> 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()
正常工作