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

2021-05-27 14:59:49 字數 1425 閱讀 5711

#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...