三者的区别:
- 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
。
评论