声明:个人所写所有博客均为自己在学习中的记录与感想,或为在学习中总结他人学习成果,但因本人才疏学浅,如果大家在阅读过程中发现错误,欢迎大家指正。
公众号:
我们常常在C程序中看到return()与exit(),那么这两个有什么区别呢,什么情况下使用呢?
简单概括来说是:exit是进程级别的,作用于当前整个进程;return是函数级别的,作用于将被函数返回值返回给主函数。
return用于对一个函数进行返回,并退出函数。代表着当前函数执行完毕,返回值交给主调函数,可以从一个函数中返回并将控制权返回给调用该函数的函数。
exit()则是一个函数,返回值交给操作系统或父进程。在ISO C中定义,会进行一些清理工作。其操作包括调用各种终止处理程序,然后关闭所有的标准I/O流等。这样就结束掉当前的进程,退出程序并将控制权返回给操作系统。如果是多进程的程序,也只是会结束当前进程,并不会结束整个程序,返回值交给父进程。
区别 | exit | return |
---|---|---|
级别 | 进程级,系统调用级别 | 函数级,语言级别 |
返回值 | 单进程程序返回给操作系统,多进程返回给父进程 | 返回给主调函数 |
作用 | 结束当前进程 | 当前(被调)函数运行完毕,表示了调用堆栈的返回 |
控制权 | 将控制权交给操作系统或父进程 | 将控制权交给主调函数 |
在main中等价
在main中这两个语句的功能等价,main函数返回一个整型值与用该值调用exit是等价的。
exit(0);
等价于
return 0;
都可用于main函数的结束。
区别
简单例子:
int main(int argc, const char * argv[]){
fun();
printf("主函数结束");
return 0;
}
int fun() {
printf("fun结束");
getchar();
return 0;
}
这个程序中,先输出“fun结束”,回车后,输出“主函数结束”
将fun中改为exit(0);
int fun() {
printf("fun结束");
getchar();
exit(0);
}
exit(0)将0返回给操作系统,结束掉当前进程,整个程序退出。输出“fun结束”后,按下回车,并不会输出“主函数结束”,而是整个程序结束。