浅析进程退出exit(0)和return 0的关系

 前言:

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(),会使函数返回继续执行。

猜你喜欢

转载自blog.csdn.net/luoyir1997/article/details/82823550