三者的区别:

  1. return作用于函数,使用return只是退出当前函数,而exit和_exit直接终止程序。
  2. 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后不会直接打印f2f2要等到下一次\n才会一起刷新。

这里由于return会刷新缓冲区,所以程序的运行结果为:

> ./a.out
f1
f2main

如果把f中的reutrn换成_exit(),f2就不会打印出来了,结果只会输出f1,因为_exit不会刷新缓冲区并且马上退出,后面的f2来不及打印到屏幕上就退出了,而main则是完全没有机会运行到所以也不会打印。

而如果把return换成exit,那么f2会被输出,输出f2后直接终止程序,也不打印main

最后修改:2018 年 05 月 21 日
喜欢就给我点赞吧