跑在main之前

2021-05-25 02:13:20 字數 968 閱讀 1890

最初發表在qq空間(這裡貼圖不方便),全文見跑在main之前

跑在main之前 (2),有圖有真相。

通常這是乙個面試題,如何讓一段**跑在main()函式前面。乙個熟練的c++開發者能夠輕易給出答案,即靜態初始化

。在c裡面又如何呢,有沒有辦法做到這點?下面講乙個vc裡的方法。

int initbeforemain()

int init2beforemain()

int initbreak()

typedef int (*pinit)();

// for c

// put following table between __xi_a and __xi_z

#pragma data_seg( ".crt$xiu" )

pinit start = ;

#pragma data_seg()

// for c++

// put following table between __xc_a and __xc_z

#pragma data_seg( ".crt$xcu" )

pinit start2 = ;

#pragma data_seg()

// for c

// put following pointer between __xi_a and __xi_z but after start

#pragma data_seg( ".crt$xiu" )

pinit start3 = initbreak;

#pragma data_seg()

int main( int argc, char* argv ) {}

在偵錯程式裡執行一下,看看效果如何,有沒有給你surprise。

..... (全文見上方鏈結)

main之前執行

分類 c 2013 01 25 14 56 1480人閱讀收藏 舉報 一 main結束 不代表整個程序結束 1 全域性物件的建構函式會在main 函式之前執行,全域性物件的析構函式會在main函式之後執行 用atexit註冊的函式也會在main之後執行。2 一些全域性變數 物件和靜態變數 物件的空間...

main函式執行之前

main函式是我們的主程式入口函式。那麼在執行main函式之前我們的程式幫我們做了些什麼了?實際上在我們的系統裝載程式之後,首先執行的 並不是main的第一行,而是某些特別的 這些 會準備好main函式需要的環境,並且負責呼叫main函式,這時候才可以在main了寫各種業務 1 設定棧指標。2 初始...

C語言 設定在main 之前執行的函式

include void before attribute constructor void after attribute destructor void before void after int main int argc,char argv 指定了函式在main之前或之後執行。當然也可以指派...