C - exit();不起作用



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

有的人说用exit(0);,有的人说用exit(1); exit(2);exit(3);它们之间有什么区别,甚至有exit(4);吗?

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

void exit( int exit_code );

这里,exit_code是程序的退出状态。调用此函数后,控制权将返回给主机环境。如果exit_codeEXIT_SUCCESS,则返回一个实现定义的状态,表示终止成功。如果exit_codeEXIT_FAILURE,则返回一个实现定义的状态,表示终止失败。在其他情况下,返回实现定义的状态值

点击这里查看更多信息。


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

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

你似乎在使用gccexit是gcc提供的内置函数之一,因此您不需要指定头文件。

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

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

在1999年的标准中,"隐式int"规则被删除了,没有可见声明的调用(在这种情况下,由#include <stdlib.h>提供)无效。即使它是无效的,编译器仍然可以发出非致命警告并根据旧规则处理它;

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

使用头文件和东西将工作!

相关内容

  • 没有找到相关文章

最新更新