出口();不管用

时间:2014-03-18 16:49:07

标签: c exit exit-code

在我的编程书中,它显示我使用了没有任何参数的退出(exit();)。 不幸的是它不起作用。

有些人说使用exit(0);而有些人说exit(1); exit(2);exit(3); 它们之间有什么区别,甚至还有exit(4);

有趣的是,我的编译器不需要stdlib.h来执行exit(0);,其余的都是。

4 个答案:

答案 0 :(得分:4)

void exit( int exit_code );

此处,exit_code是程序的退出状态。调用此控件后,控件将返回到主机环境。如果exit_codeEXIT_SUCCESS,则返回指示成功终止的实现定义状态。如果exit_codeEXIT_FAILURE,则返回实现定义的状态,表示终止失败。 在其他情况下,返回实现定义的状态值

查看here了解详情。


PS:您的编译器不需要stdlib.h来执行exit(0);的原因可能是它已被包含在您的代码中的其他标头包含,或者作为@ devnull提到,使用gcc构建时exit()是其中一个内置函数。

答案 1 :(得分:3)

  

有趣的是我的编译器不需要stdlib.h来执行   退出(0);其余的。

您似乎正在使用gccexit是gcc提供的built-in functions之一,因此您不需要指定的标头。

传递给exit()的参数用于表示终止状态。

答案 2 :(得分:1)

在1999版ISO C标准之前,调用没有可见声明的函数是合法的。编译器将假设函数存在,从而创建一个隐式声明。 (它还假设它返回int类型的结果,exit()没有。)如果此隐式声明与函数的实际定义不匹配,则行为未定义。

从1999年标准开始,“隐式int”规则被删除,没有可见声明的调用(在本例中由#include <stdlib.h>提供)变得无效。即使它无效,编译器仍可能发出非致命警告并按旧规则处理它; gcc默认执行此操作。

在任何语言版本下,exit都需要一个int类型的参数。传递0EXIT_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()正常工作

,请尝试此操作