本以为主函数main是首先被调用的函数,后来发现操作系统会调用一个启动函数,对C++运行库进行初始化。

本以为主函数main被返回之后操作系统将回收资源,却不知一个重要的函数—atexit()

 

程序退出的时候需要一些诸如释放资源的操作,但是程序的退出有很多种,可能是main函数结束范围一个值传递给exit(),也可能是一些其他的原因,所以需要一种与程序结束方式无关的方法来进行程序退出时必要的处理。

 

函数原型:int atexit(void(*)(void));

函数作用:注册一个函数,这个函数在程序结束的时候被调用

 

 
  
  1. #include<cstdlib> 
  2. #include<iostream> 
  3. using namespace std; 
  4.  
  5. void fun1() 
  6.     cout<<"fun1"<<endl; 
  7. void fun2() 
  8.     cout<<"fun2"<<endl; 
  9.  
  10. int main() 
  11.     atexit(fun1);//注册fun1,主函数终止时调用 
  12.     atexit(fun2);//注册fun2,主函数终止时调用 
  13.     cout<<"mian exit"<<endl; 
  14.     return 0; 
  15.  
  16.  
  17. //运行结果: 
  18. main exit 
  19. fun2 
  20. fun1 

从结果中可以发现fun1和fun2两个函数在主函数结束之后被调用,而且调用的顺序与注册的顺序相反。