大家都知道它會快, 但我想說一點我之前不知道的: 如果希望inline有效果, 使用的地方就得與定義的地方在同乙個檔案, 得知道函式體. 我覺得原因是這樣的: 如果不在乙個檔案, 那麼呼叫它的函式就必然會是call了, call的話, 就不會省去任何函式的開銷. 我們知道, c是單檔案編譯的(侷限我的所知), 它看不到其它檔案. 反過來, 如果函式體與呼叫在同乙個檔案中, 那麼就可以把這個函式拷貝過去, 然後再來編譯.
因此如果是多檔案都需要使用, 典型做法是在乙個標頭檔案中實現(是的, 與一般的標頭檔案不包括實現的規則不同, 這是個例外), 然後宣告為static(否則有重定義問題). 當然也是有代價的:
編譯得到的檔案變大了些
函式沒有位址, 沒法用函式指標, debugger也用不了
當然你可能發現第2點說的不對, 如果用函式指標, 編譯器也沒有報錯, 那是因為編譯器看到用了函式指標, 放棄了優化. inline只是建議, 不一定真的優化.
inline 關鍵字使用
inline關鍵字是用於函式宣告或定義,可以把函式指定為內聯函式,而且關鍵字inline必須與函式定義放在一起才能使函式成為內聯,僅僅將inline放在函式宣告前是不起任何作用的。inline的作用是什麼呢?為什麼要引入inline功能呢?簡單的講 inline的作用與 巨集定義 作用相同,但是又不...
C 中的inline關鍵字
from here 在c c 中,為了解決一些頻繁呼叫的小函式大量消耗棧空間 棧記憶體 的問題,特別的引入了inline修飾符,表示為內聯函式。棧空間就是指放置程式的區域性資料 也就是函式內資料 的記憶體空間。在系統下,棧空間是有限的,假如頻繁大量的使用就會造成因棧空間不足而導致程式出錯的問題,如,...
C 關鍵字之inline
一般在呼叫函式時會產生該函式的棧幀結構,在棧幀結構中儲存關於該函式的引數 變數等臨時資料 另外還要儲存現場,函式返回後還要恢復現場。這些都要花費一些時間。如果有的函式需要頻繁使用,則在反覆呼叫的過程中會有很大的時間開銷,降低程式執行效率。c 提供了一種提高效率的方法,即在編譯時將所呼叫的函式的 直接...