exit()函数和rutirn函数的区别?_exit()和exit()的区别?exit()函数详解!return函数详解!

来源:互联网 发布:图片文字识别软件 编辑:程序博客网 时间:2024/06/06 06:51

      exit是一个函数,进程退出时会有一个值,exit函数的参数就是指明进程退出的返回值,操作系统根据这个值来判断是否是正常退出。你也可以通过GetExitCodeProcess来获取这个值(windows下),一般情况下退出值是0表示正常(exit(0)),其它情况都是不正常的

exit是操作系统提供的(或者函数库中给出的)。exit是一个库函数,exit(1)表示发生错误后退出程序,exit(0)表示正常退出。在stdlib.h中exit函数是这样子定义的:void exit(int status)。这个系统调用是用来终止一个进程的,无论在程序中的什么位置,只要执行exit,进程就会从终止进程的运行。讲到exit这个系统调用,就要提及另外一个系统调用,_exit,_exit()函数位于unistd.h中,相比于exit(),_exit()函数的功能最为简单,直接终止进程的运行,释放其所使用的内存空间,并销毁在内存中的数据结构,而exit()在于在进程退出之前要检查文件的状态,将文件缓冲区中的内容写回文件。

return是C语言提供的,return用于结束一个函数的执行,将函数的执行信息传出给其他调用函数使用;exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS或其父进程,这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是 0 为正常退出, 非0 为非正常退出。


exit(0):正常运行程序并退出程序;
exit(1):非正常运行导致退出程序;
return():返回函数,若在主函数中,则会退出函数并返回一值。
详细说:
1. return返回函数值,是关键字; exit 是一个函数。
2. return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。
3. return是函数的退出(返回);exit是进程的退出。
4. return是C语言提供的,exit是操作系统提供的(或者函数库中给出的)


 非主函数中调用return和exit效果很明显,但是在main函数中调用return和exit的现象就很模糊,多数情况下现象都是一致的。

_exit();和exit()主要区别是一个退出进程会清理I/O缓冲区,一个直接结束进程进入到内核中。
下面我就举个例子说明下吧,
int mian()
{
printf("is ok\n");
printf("I am a chinese people");
_exit(0);
}
这个程序输出的结果是:is ok
int mian()
{
printf("is ok\n");
printf("I am a chinese people");
exit(0);
}
这个程序输出的结果是:is ok 
I am a chinese people
当时把第二个输出信息后面加一个"\n";两个程序的结果都会输出相同的结果,两个打印信息都会打印出来。
在这里我总结了一下原因吧,可能只是一个小细节,以后大家遇到同样的问题注意下就行了
原因如下:
printf函数就是使用的是缓冲I/O的方式,该函数在遇到“\n“换行符时自动的从缓冲区中将记录读出。所以exit()将缓冲区的数据写完后才能退出来,所以调用exit()函数后程序并不会马上退出,这就是有些出现的僵尸程序,而_exit是直接退出进入到内核中去。
  
  return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。
  return是返回函数调用,如果返回的是main函数,则为退出程序   
  exit是在调用处强行退出程序,运行一次程序就结束   
  -------------------------------------------------------------------   
  return是返回 , 函数返回   
  而exit是退出   
  -------------------------------------------------------------------   
  exit(1)表示异常退出.这个1是返回给操作系统的不过在DOS好像不需要这个返回值   
  exit(0)表示正常退出   
  -------------------------------------------------------------------   
  无论写在那里,都是程序推出,dos和windows中没有什么不一样,最多是系统处理的不一样。   
  数字0,1,-1会被写入环境变量ERRORLEVEL,其它程序可以由此判断程序结束状态。   
  一般0为正常推出,其它数字为异常,其对应的错误可以自己指定。   
  -------------------------------------------------------------------   
  返回给操作系统的,0是正常退出,其他值是异常退出,在退出前可以给出一些提示信息,或在调试程序中察看出错原因.
exit是一个函数,进程退出时会有一个值,exit函数的参数就是指明进程退出的返回值,操作系统根据这个值来判断是否是正常退出。你也可以通过GetExitCodeProcess来获取这个值(windows下),一般情况下退出值是0表示正常(exit(0)),其它情况都是不正常的

1 0