本以為主函數main是首先被調用的函數,後來發現操作系統會調用一個啟動函數,對C++運行庫進行初始化。
本以為主函數main被返回之後操作系統將回收資源,卻不知一個重要的函數—atexit()。
程序退出的時候需要一些諸如釋放資源的操作,但是程序的退出有很多種,可能是main函數結束范圍一個值傳遞給exit(),也可能是一些其他的原因,所以需要一種與程序結束方式無關的方法來進行程序退出時必要的處理。
函數原型:int atexit(void(*)(void));
函數作用:注冊一個函數,這個函數在程序結束的時候被調用
#include<cstdlib>
#include<iostream>
using namespace std;
void fun1()
{
cout<<"fun1"<<endl;
}
void fun2()
{
cout<<"fun2"<<endl;
}
int main()
{
atexit(fun1);//注冊fun1,主函數終止時調用
atexit(fun2);//注冊fun2,主函數終止時調用
cout<<"mian exit"<<endl;
return 0;
}
//運行結果:
main exit
fun2
fun1
從結果中可以發現fun1和fun2兩個函數在主函數結束之後被調用,而且調用的順序與注冊的順序相反。
摘自 C小加