內聯函式,可以看作是編譯期間的一種替換,其設計的目的是為了代替複雜的巨集替換。因為巨集替換是預編譯期間做的,所以如果有問題,沒有那麼容易察覺出來。
內聯函式在編譯期間的替換會將函式的**替換到呼叫它的地方,在彙編這一層來看,我們就不需要再在棧裡儲存主程式執行到的**的記憶體位址等資訊,這樣就可以節約一點時間了。很多時候,這點時間是微乎其微的,使用內聯函式節省時間的效果並不明顯。
我不知道有沒有強制內聯這種東西,內聯這種機制可能大部分還是屬於編譯器自己對**的優化。不管你有沒有加inline關鍵字,編譯器都會有自己的判斷來選擇內聯或者不內聯。
所以說內聯更像是程式設計師給編譯器的建議,決定權在編譯器。
內聯函式是為頻繁使用、並且過程不大的小型函式設計的,它是以增加rom占用空間來節省函式呼叫的開銷,內聯函式使用不當就會造成**膨脹,所以使用它一定要小心。
so, for function-like macros, prefer inline functions to #defines.
inline 內聯函式
一 inline關鍵字用來定義乙個類的內聯函式,引入它的主要原因是用它替代c中表示式形式的巨集定義。表示式形式的巨集定義一例 define expressionname var1,var2 var1 var2 var1 var2 為什麼要取代這種形式呢,且聽我道來 1 首先談一下在c中使用這種形式巨...
inline內聯函式
技術類筆試題50 都會問巨集與inline的區別,自己去找找看?1 巨集替換發生在預編譯 2 巨集函式 如果可以這麼叫的話 替換時不會檢查引數,inline函式會檢查 3 巨集一定會發生替換,inline貌似不是強制的,編譯器想不替換也沒關係 4 巨集替換時存在著一些不可避免的陷阱 參見c trap...
inline內聯函式
一 內聯函式 內聯函式是指用inline關鍵字修飾的函式 它與普通函式所不同之處只在於函式呼叫的處理。普通 函式進行呼叫時,要將程式執行權轉到被呼叫函式中,然後再返回到呼叫它的函式中 內聯函式不是在呼叫時發生執行權轉移,而是在編譯時將 函式 體 嵌入在每乙個呼叫處。編譯時類似巨集替換,使用 函式體替...