三者的区别:
- return 作用于函数,使用 return 只是退出当前函数,而 exit 和_exit 直接终止程序。
- return 和 exit 在退出各自作用域前会自动刷新缓冲区,_exit 不会刷新当前缓冲区。
例如以下代码的 f
函数中使用 return,exit 和_exit 退出的结果都不一样。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#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 会刷新缓冲区,所以程序的运行结果为:
1 2 3 |
> ./a.out f1 f2main |
如果把 f
中的 reutrn 换成_exit(),f2 就不会打印出来了,结果只会输出 f1
,因为_exit 不会刷新缓冲区并且马上退出,后面的 f2
来不及打印到屏幕上就退出了,而 main
则是完全没有机会运行到所以也不会打印。
而如果把 return 换成 exit,那么 f2
会被输出,输出 f2 后直接终止程序,也不打印 main
。
评论