return和exit的区别

一. 不从面向对象角度 1

1.exit是结束当前的进程,无论你在那里去调用它.
2.return是跳出当前的函数.

举例说明:
Example with return:

#include 

void f(){
     
    printf("Executing f\n");
    return;
}

int main(){
     
    f();
    printf("Back from f\n");
}

If you execute this program it prints:

Executing f
Back from f


Another example for exit():

#include 
#include //exit needs it 

void f(){
     
    printf("Executing f\n");
    exit(0);
}

int main(){
     
    f();
    printf("Back from f\n");
}

If you execute this program it prints:

Executing f

可以看出来,f函数中调用完exit函数后,程序直接就结束了,不会再回到main函数中.而return在执行完f函数后,还会回到main函数中.

exit适用的场景:
直接结束当前进程,而不需要进行异常处理的情况,比如我们经常看到linux中多线程的例子中,函数中经常用exit来退出程序.(例子)

exit不适合的场景:
不适合直接用在库函数中,因为一旦执行到exit语句,调用者的程序也会结束掉(因为两者都在一个进程中).这会把库的使用者给干懵,这种情况更适合返回错误码的方式.

二.从面向对象角度 2

在C++中,使用return会调用析构函数,而使用exit不会调用析构函数.

注意,对于静态对象,调用exit也会调用析构函数;而调用abort函数,则本地对象,静态对象,全局对象他们的析构函数都不会被调用.


  1. https://stackoverflow.com/questions/3463551/what-is-the-difference-between-exit-and-return ↩︎

  2. https://stackoverflow.com/questions/461449/return-statement-vs-exit-in-main ↩︎

你可能感兴趣的:(C++)