[C/C++] 如何在main函數之前執行一些程式碼

2020-08-12 18:45:22

方法1 : 藉助類別建構函式

class A{
public:
    A(){
        //do something
    }
}

//main.cpp
A a;

int main()
{
    ...
}

全域性變數的初始化早於main函數,故可行。

 

方法2:藉助lambda表達式

CRITICAL_SECTION cs;

int a = [](CRITICAL_SECTION& _cs){    //注意這裏是參照,不然會對CRITICAL_SECTION進行賦值構造而 
                                      //產生新的CRITICAL_SECTION,進入可能導致異常
    InitialCriticalSection(_cs);
    return 0;
}(cs);

和方法1的基礎思想一致,優點是不需要建立額外的類範例,這在某些特定場景下很有用,比如初始化 需要被用作自釋放鎖的CRITICAL_SECTION

 

總而言之:

但凡在程式啓動之前做的動作都可以實現,比如預編譯、記憶體空間裝載、全域性變數初始化、靜態變數初始化、編譯指令、鏈接指令等等。

上述兩種方法還是比較好用的,能應付絕大多數場景。