#include void before() __attribute__((constructor));
void after() __attribute__((destructor));
void before()
void after()
int main(int argc, char **argv)
指定了函式在main之前或之後執行。
當然也可以指派多個,而且在申明時
void before() __attribute__((constructor));
void __attribute__((constructor)) before();
__attribute__((constructor)) void before();
這3種都是對的,__attribute__(())寫法比較隨意,當一般推薦放在後面,當然定義函式體的時候 __attribute__(()) 不能放在後面,推薦定義函式的時候一般不要使用,這就是為什麼推薦第一種的原因,__attribute__屬性列表的用法還有還多,記憶體對齊,函式格式, 等等等等就不一一枚舉了。man gcc 查詢下 __attribute__可以發現這些,另標準庫和linux核心裡面也有不少。
也可以一次指定多個屬性 如下:
void func(void) __attribute__((constructor destructor));
attribute 是gcc、 g++的關鍵字,vc是不能用這個的,
如果您是在windows下你可以指定設定資料段來做,以實現同樣功能,如下:
#include int main(int argc, char ** argv)
int before()
int after()
typedef int func();
#pragma data_seg(".crt$xiu")
static func *before_function_array = ;
#pragma data_seg(".crt$xpu")
static func *after_function_array = ;
#pragma data_seg()
attribute還有個應用:
增加函式別名,下面,當然下面那個就不能是main了,要不就重複定義了
# include int main(int argc, char **argv) __attribute__((alias("linuxmain")));
int linuxmain(int argc, char **argv)
int main1(int argc, char **argv)
c 中static變數在main函式之前執行
c c 語言中,在執行main的入口函式之前,是會首先執行一段 而對於全域性變數和static的初始化就是 在main函式之前執行的,例子如下 cpp view plain copy include include class static name static intstatic print p...
1 1 main函式執行之前的過程
從開機到main函式的執行分三步完成 1 啟動bios,在記憶體中載入實模式下的中斷向量表和終端服務程式 2 從啟動盤載入作業系統程式到記憶體 3 為執行32的main函式做過渡工作 這篇部落格先將第一步。我們都知道cpu只能執行記憶體中的程式,但是記憶體中得內容是斷電即消失的。那麼開機後,空空如也...
在main 之前和之後呼叫自己的函式
文章出處 作者 vision chen yeah.net 下面給出乙個可移植的在main 函式之前和之後呼叫自己函式的一種實現方式 借助全域性變數先於main 構造和後於main 析構的原理。include include void before main void after main names...