2013-02-01 24 views
0

可能重複:
Can you print anything in C++, before entering into the main function?是否有可能性之前調用其他方法/指令的main()運行代碼時

是否有可能運行之前INT主任何其他說明()被調用?

int main(){cout<<"a";} 

和在主那個呼叫()有呼叫爲COUT < < 「B」 之前;某處之前。也許這個#定義的事情可以幫助。

+4

'布爾f()的{COUT <<「前主」;返回true; } bool dummy = f(); int main(){cout <<「main」; }' – jrok

+0

當然有,谷歌它。 –

+0

是的。事實上,你甚至可以在'main'之前退出程序:) – chris

回答

11

您不需要define。只需創建一個全局對象(在同一個文件中),它的ctor(或其他用來初始化它的東西,比如調用一個函數)將在main調用之前運行。

編輯:同樣,這些全局對象將在主要退出後被銷燬,所以它們的析構函數將在當時運行。

+1

工作很好。我會盡快接受它。有沒有可能在main()之後運行某些東西? – Yoda

+1

@RobertKilar,破壞者。 – chris

2

全局對象在main()運行之前構造。所以,你可以定義一個類,把你的代碼在其構造,然後聲明類的全局實例:)

class temp 
{ 
public: 
    temp() 
    { 
     cout << "before main" << endl; 
    } 

    ~temp() 
    { 
     cout << "after main" << endl; 
    } 
}; 

temp t; 

int main() 
{ 
    cout << "in main" << endl; 
    return 0; 
} 

全局變量之前主要還是初始化(運行。您可以定義一個返回值的函數,然後調用該函數並將該值賦給其聲明中的全局變量,如@jrok所示。

一些編譯器還支持#pragma startup語句來執行在啓動一個用戶定義的函數(和相應的#pragma exit語句關機):

void beforeMain() 
{ 
    cout << "before main" << endl; 
} 
#pragma startup beforeMain 

void afterMain() 
{ 
    cout << "after main" << endl; 
} 
#pragma exit afterMain 

int main() 
{ 
    cout << "in main" << endl; 
    return 0; 
} 
+0

只是全局並不能確保在執行main之前創建/初始化該對象。它必須位於與main相同的翻譯單元中,以確保它在main調用之前創建。 –

相關問題