三者的区别:
- return作用于函数,使用return只是退出当前函数,而exit和_exit直接终止程序。
- return和exit在退出各自作用域前会自动刷新缓冲区,_exit不会刷新当前缓冲区。
例如以下代码的f
函数中使用return,exit和_exit退出的结果都不一样。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void f() {
printf("f1\n");
printf("f2");
return;
}
int main() {
f();
printf("main\n");
return 0;
}
linux环境中,程序默认遇到\n
才刷新缓冲区,正常情况下上面的代码在打印完f1
后不会直接打印f2
,f2
要等到下一次\n
才会一起刷新。
这里由于return会刷新缓冲区,所以程序的运行结果为:
> ./a.out
f1
f2main
如果把f
中的reutrn换成_exit(),f2就不会打印出来了,结果只会输出f1
,因为_exit不会刷新缓冲区并且马上退出,后面的f2
来不及打印到屏幕上就退出了,而main
则是完全没有机会运行到所以也不会打印。
而如果把return换成exit,那么f2
会被输出,输出f2后直接终止程序,也不打印main
。
此处评论已关闭