您的位置:首页 > 编程语言 > C语言/C++

解释return和exit()的区别

2016-11-23 10:00 190 查看
1.return是C语言提供的,exit是操作系统提供的(或者函数库中给出的)。exit是一个库函数,通常情况:exit(0)表示程序正常,exit(1)和exit(-1)表示程序异常退出,exit(2)表示表示系统找不到指定的文件。在整个程序中,只要调用exit就结束(当前进程或者在main时候为整个程序)。在stdlib.h中exit函数是这样子定义的:void exit(int status)。这个系统调用是用来终止一个进程的,无论在程序中的什么位置,只要执行exit,进程就会从终止进程的运行。

exit(0):正常运行程序并退出程序;

exit(非0):非正常运行导致退出程序;

return():返回函数,若在主函数中,则会退出函数并返回一值。

2.return用于结束一个函数的执行,将函数的执行信息传出给其他调用函数使用;exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS或其父进程,这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是0为正常退出, 非0为非正常退出,理论上exit可以返回小于256的任何整数


3. return返回函数值并退出函数,是关键字; exit 是一个函数。

4.return是语言级别的,它表示了调用堆栈的返回;return( )是当前函数返回,当然如果是在主函数main,
自然也就结束当前进程了,如果不是,那就是退回上一层调用。在多个进程时。如果有时要检测上个进程是否正常退出。就要用到上个进程的返回值,依次类推。而exit是系统调用级别的,它表示了一个进程的结束

5.
return是函数的退出(返回);exit函数是进程的退出,它退出应用程序,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息。

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

C 标准规定,主函数返回时,如果其类型与 int 兼容,则此返回的效果应该是 exit(返回值) 。看起来,main 函数可以选择以 return 结束,也可以选择使用 exit() 结束,两者的区别不大。但是事实上 return 和直接调用 exit 的效果并不完全一样。如果使用 return,则 main 函数的栈帧将回收并失效。因此,比如说在 main 函数中有类似这样的代码:

int
main(int argc, char **argv, char **envp)
{
char *p;

/* ... */
p = malloc(PAGE_SIZE);
/* ... */
[/code]

而在 return 前,p没有释放,也没有赋值到某个静态变量上,则技术上 这块内存泄露了,因为从已知的所有栈帧(注意,return 导致了 main 栈帧的失效)及静态分配的变量无法再到达这块内存。而直接调用 exit() 时,则没有这个问题,因为此时 main() 函数的栈帧仍然是有效的。

不过,实践中这项细微的差异并没有太大的影响,因为最终 exit() 会通知操作系统进程结束,后者会回收属于进程的全部内存页。另一方面,由于 main() 的栈帧已经回收,因此 return 减少了栈空间的需求。

我个人认为,一般情况下应使用 return() 来结束 main(),但如果 main() 中分配了内存,则应使用 exit() 结束(一般来说,除非是多次分配或者系统的内存空间非常紧张,否则 main(),特别是短命程序如命令行工具的 main() 中分配的内存不应使用 free() 释放)。这样做的理由是因为前面所说的技术性内存泄露可能会给内存泄露检测器或静态分析工具带来困扰。

参考:
https://www.zhihu.com/question/30342672/answer/61321168 http://blog.csdn.net/congzhao27/article/details/39273011 http://blog.sina.com.cn/s/blog_5c0153620100dsqb.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 return exit