欢迎来到天天文库
浏览记录
ID:42575223
大小:15.39 KB
页数:4页
时间:2019-09-18
《exit()函数详解与Exit() 和 Return() 的区别》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、exit()函数详解与Exit()和Return()的区别exit(0)表示程序正常,exit(1)/exit(-1)表示程序异常退出exit()结束当前进程/当前程序/,在整个程序中,只要调用exit,就结束return()是当前函数返回,当然如果是在主函数main,自然也就结束当前进程了,如果不是,那就是退回上一层调用。在多个进程时.如果有时要检测上进程是否正常退出的.就要用到上个进程的返回值..exit(1)表示进程正常退出.返回1;exit(0)表示进程非正常退出.返回0.进程环境与进程控制(1):进程的开始与终止1.进程的开始:C程序是从main函数开始执行,原型如下:
2、intmain(intargc,char*argv[]);通常main的返回值是int型,正确返回0.如果main的返回值为void或者无,某些编译器会给出警告,此时main的返回值通常是0.关于main的命令行参数不做过多解释,以下面的程序展示一下:#includeintmain(intargc,char*argv[]){ inti; for(i=0;i3、:return,exit,_exit,_Exit,pthreade_exit异常中指分为:abort,SIGNAL,线程响应取消主要说一下正常终止的前4种,即exit系列函数.#include /*ISOC*/voidexit(intstatus);void_Exit(intstatus);#include /*POSIX*/void_exit(intstatus);以上3个函数的区别是:exit()(或return0)会调用终止处理程序和用户空间的标准I/O清理程序(如fclose),_exit和_Exit不调用而直接由内核接管进4、行清理.因此,在main函数中exit(0)等价于return0.3.atexit终止处理程序:ISOC规定,一个进程最对可登记32个终止处理函数,这些函数由exit按登记相反的顺序自动调用.如果同一函数登记多次,也会被调用多次.原型如下:#includeintatexit(void(*func)(void));其中参数是一个函数指针,指向终止处理函数,该函数无参无返回值.以下面的程序为例:#includestaticvoidmyexit1(){ printf("firstexithandler");}staticvoidmyex5、it2(){ printf("secondexithandler");}intmain(){ if(atexit(my_exit2)!=0) printf("can'tregistermy_exit2"); if(atexit(my_exit1)!=0) printf("can'tregistermy_exit1"); if(atexit(my_exit1)!=0) printf("can'tregistermy_exit1"); printf("mainisdone"); retu6、rn0;}运行结果:$./a.outmainisdonefirstexithandlerfirstexithandlersecondexithandler运行结果:$./a.outarg1arg2arg3argv[0]:./a.outargv[1]:arg1argv[2]:arg2argv[3]:arg3
3、:return,exit,_exit,_Exit,pthreade_exit异常中指分为:abort,SIGNAL,线程响应取消主要说一下正常终止的前4种,即exit系列函数.#include /*ISOC*/voidexit(intstatus);void_Exit(intstatus);#include /*POSIX*/void_exit(intstatus);以上3个函数的区别是:exit()(或return0)会调用终止处理程序和用户空间的标准I/O清理程序(如fclose),_exit和_Exit不调用而直接由内核接管进
4、行清理.因此,在main函数中exit(0)等价于return0.3.atexit终止处理程序:ISOC规定,一个进程最对可登记32个终止处理函数,这些函数由exit按登记相反的顺序自动调用.如果同一函数登记多次,也会被调用多次.原型如下:#includeintatexit(void(*func)(void));其中参数是一个函数指针,指向终止处理函数,该函数无参无返回值.以下面的程序为例:#includestaticvoidmyexit1(){ printf("firstexithandler");}staticvoidmyex
5、it2(){ printf("secondexithandler");}intmain(){ if(atexit(my_exit2)!=0) printf("can'tregistermy_exit2"); if(atexit(my_exit1)!=0) printf("can'tregistermy_exit1"); if(atexit(my_exit1)!=0) printf("can'tregistermy_exit1"); printf("mainisdone"); retu
6、rn0;}运行结果:$./a.outmainisdonefirstexithandlerfirstexithandlersecondexithandler运行结果:$./a.outarg1arg2arg3argv[0]:./a.outargv[1]:arg1argv[2]:arg2argv[3]:arg3
此文档下载收益归作者所有