main函數執行之前,主要就是
初始化系統相關資源:
1. 設置棧指針
2. 初始化static靜態和global全局變量,即data段的內容
3. 將未初始化部分的全局變量賦初值:數值型short,int,long等為0,bool為FALSE,指針為NULL,等等,即.bss段的內容
4. 全局對象初始化,在main之前調用構造函數
5. 將main函數的參數,argc,argv等傳遞給main函數,然后才真正運行main函數
main函數執行之后:
1. 全局對象的析構函數會在main函數之后執行;
2. 可以用_onexit 注冊一個函數,它會在main 之后執行;
如果你需要加入一段在main退出后執行的代碼,可以使用onexit()函數,注冊一個函數。
#include <stdlib.h> #include <stdio.h> int atexit(void (*function")(void)); void fn1( void ), fn2( void ), fn3( void ); int main( void ){ onexit( fn1 ); onexit( fn2 ); printf( "This is executed first." ); } void fn1(){ printf( " This is" ); } void fn2(){ printf( " executed next." ); } |
結果:This is executed first.This is executed next.