可以說,我有我的頭文件中的兩個內聯函數:可以內聯後宣佈C基準實體函數體
inline int foo() { return bar()+2; }
inline int bar() { return 3; }
我可以假設C99編譯器將內聯「富」即使「酒吧」是以後宣佈? 假設沒有其他內部規則像大到功能體被觸發。
即使C99將此選項作爲選項,c編譯器的實現是否會執行此操作(流行的編譯器會說Intel-C/Sun Studio/MSVC和gcc)?
可以說,我有我的頭文件中的兩個內聯函數:可以內聯後宣佈C基準實體函數體
inline int foo() { return bar()+2; }
inline int bar() { return 3; }
我可以假設C99編譯器將內聯「富」即使「酒吧」是以後宣佈? 假設沒有其他內部規則像大到功能體被觸發。
即使C99將此選項作爲選項,c編譯器的實現是否會執行此操作(流行的編譯器會說Intel-C/Sun Studio/MSVC和gcc)?
只要功能正確的原型,它不會影響你聲明的順序。
inline
只是編譯器的一個暗示,在現代優化編譯器中經常被忽略。你不能假設任何事情是否被內聯。某些編譯器提供的編譯指示強制將特定函數內聯(如果可能)(例如,MSVC __forceinline
)。如果你絕對需要知道,你必須看看輸出的反彙編。
這就是說,對於給定的代碼片段,任何像樣的優化編譯器都會內聯該代碼,只要它是單個頭文件,就可以使用inline
。