2)main函數在執行前和執行後有哪些操作,main函數
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.