2009-11-30 35 views
2

可以說,我有我的頭文件中的兩個內聯函數:可以內聯後宣佈C基準實體函數體

inline int foo() { return bar()+2; } 
inline int bar() { return 3; } 

我可以假設C99編譯器將內聯「富」即使「酒吧」是以後宣佈? 假設沒有其他內部規則像大到功能體被觸發。

即使C99將此選項作爲選項,c編譯器的實現是否會執行此操作(流行的編譯器會說Intel-C/Sun Studio/MSVC和gcc)?

回答

3

只要功能正確的原型,它不會影響你聲明的順序。

3

inline只是編譯器的一個暗示,在現代優化編譯器中經常被忽略。你不能假設任何事情是否被內聯。某些編譯器提供的編譯指示強制將特定函數內聯(如果可能)(例如,MSVC __forceinline)。如果你絕對需要知道,你必須看看輸出的反彙編。

這就是說,對於給定的代碼片段,任何像樣的優化編譯器都會內聯該代碼,只要它是單個頭文件,就可以使用inline