前言:
exit()函数用于在程序运行的过程中随时结束程序,exit的参数state是返回给操作系统,返回0表示程序正常结束,非0表示程序非正常结束。main函数结束时也会隐式地调用exit函数。exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件,最后调用_exit系统函数。
进程终⽌的⽅式有8种,前5种为正常终⽌,后三种为异常终⽌:
1 从main函数返回;
2 调⽤exit函数;
3 调⽤_exit或_Exit;
4 最后⼀个线程从启动例程返回;
5 最后⼀个线程调⽤pthread_exit;
6 调⽤abort函数;
7 接到⼀个信号并终⽌;
8 最后⼀个线程对取消请求做出响应。
/*例子一:在调用函数中return 0*/
#include<stdio.h>
int fun()
{
return 0;//调用return会把返回值返回到函数调用处,但不会使整个进程退出
}
int main()
{
fun();
printf("haha");
return 0;
}
运行结果:打印haha
/*例子二:在调用函数中调用exit(0)*/
#include<stdio.h>
#include<stlib.h>
int fun()
{
exit(0);//调用exit()导致整个进程退出,整个程序退出
}
int main()
{
fun();
printf("haha");
return 0;
}
运行结果:不打印haha
/*例子三:在主函数中return 0*/
#include<stdio.h>
#include<stlib.h>
int main()
{
return 0; //在主函数中调用return 相当于exit(0),主进程退出,不再顺序执行语句
printf("haha");
}
运行结果:不打印haha
总结:
1.在任何地方调exit()都会使整个进程退出,无论是主函数还是其他函数。
2.只有main()函数里return会调用exit(),使整个进程退出,后面的语句不再执行。
3.在其他函数调用return不会调用exit(),会使函数返回继续执行。