exit(0):正常运行程序并退出程序;
exit(1):非正常运行导致退出程序;
return():返回函数,若在主函数中,则会退出函数并返回一值。
详细说:
1. return返回函数值,是关键字; exit 是一个函数。
2. return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。
3. return是函数的退出(返回);exit是进程的退出。
4. return是C语言提供的,exit是操作系统提供的(或者函数库中给出的)。
5. return用于结束一个函数的执行,将函数的执行信息传出个其他调用函数使用;exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是 0 为正常退出, 非0 为非正常退出。
6. 非主函数中调用return和exit效果很明显,但是在main函数中调用return和exit的现象就很模糊,多数情况下现象都是一致的。
C++中 exit() 与 return 表现出的区别
exit():
代码 #include <iostream> using namespace std; class Temp { public: Temp(){cout<<"Constructor!"<<endl;} ~Temp(){cout<<"Destructor!"<<endl;} }; int main() { Temp t; exit(0) ; }
Constructor!
Press any key to continue
return:
代码 #include <iostream> using namespace std; class Temp { public: Temp(){cout<<"Constructor!"<<endl;} ~Temp(){cout<<"Destructor!"<<endl;} }; int main() { Temp t; return 0; }
Constructor!
Destructor!
Press any key to continue
综上:
exit()退出程序,把控制权交给OS
return结束当前函数,返回函数值,把控制权交给调用函数
在main函数中return 与exit用法差不多,但return会自动调用对象的析构函数, 而exit不会
C/C++ 中 exit() 函数的参数有什么意义 (转自知乎)
问:
1)我知道0表示正常退出,非0表示错误退出,但是这参数究竟有什么意义呢?
2)据说面向对象中不建议使用exit()函数,如果是,这是为什么呢,又该用什么方法替换呢?
答:
C 语言的设计之初就是为 Unix 系统设计的,而这个系统是『很多程序互相配合』搭配成一个系统。
每个运行着的程序都是进程,而进程就会有父进程,父进程通常是直接启动你的进程,父进程死亡的进程会被 init 收养,其父进程变为 init,而 init 的父进程是进程 0,进程 0 则是系统启动时启动的第一个进程。
exit() 里面的参数,是传递给其父进程的。对父进程来说,你的进程就像是一个函数,而函数可以有返回值。
1)这个参数有什么意义:
exit() 的参数,是给自己的父进程使用的。通常一个程序的父进程可能是任何进程,因此我们无法预期我们的父进程是否规定必须要有这个返回值,那么我们应当提供这个返回值,以保证不同的父进程的需求得到满足。
一个典型的例子是 make,Makefile 对于一个 target 下面有多条顺序执行的语句,而 make 作为父进程,会检查每个语句的返回值是否为 0 ,遇到任何一个非 0 值,都会停止当前 rule 的执行。而我们知道,make 实际上可以执行任何命令任何程序,因而任何被 make 调用的程序必须有正确的返回值。
2)为什么要使用 exit() 函数:
事实上在大部分系统里,main 函数都不是应用程序的真正入口点。
真正入口点是 C 运行库里的一个函数,那个函数要负责先做一些初始化工作,然后才调用 main。main 返回到运行库里的入口函数后,它还要做一些善后工作。
如果有任何一个平台必须调用 exit 才能正常退出,那这个平台就一定会把 exit 封装在 C 运行库里,让 main 返回的时候调用 exit 实现「正常退出」。
exit 函数存在的价值是在你不想或不愿意返回 main 的时候直接在某嵌套函数中终止程序的运行。至于这样的做法好还是不好,那就是另外一个问题了。反正我个人是很反感「结束在调用栈中」这样的退出方式的。