C 之inline內聯函式

2021-08-05 22:13:23 字數 772 閱讀 8860

inline內建函式又叫內聯函式。

使用的時候在函式前加上inline,該函式就被生命為內建函式。每當程式中出現對該函式的呼叫時,c++編譯器使用函式體中的**插入到呼叫該函式的語句之處,而不是將流程轉出去,同時用實參代替形參,以便在程式執行時不再進行函式呼叫。

引入內建函式的目的就是:消除呼叫時系統的開銷,以提高執行的速度,減少對cpu的中端次數。

我們知道,在程式執行過程中呼叫函式時,系統要將程式當前的一些狀態資訊存到棧中,同時轉到函式的**處去執行函式體語句(此過程為中斷),這些引數儲存和傳遞的過程中需要時間和空間的開銷,使得程式的效率降低,特別是在程式頻繁呼叫函式時,這個問題會更嚴重。

使用內建函式是一種空間換時間的措施,若內建函式過長,且呼叫太頻繁時,目標程式將加長很多,因此通常只有較短的函式才定義為內建函式。而在內建函式中一般不能有迴圈語句和開關語句。

為什麼內建函式不能有while,switch,遞迴等等複雜的語句 ?

其實不是不能有,而是有了也沒有用,因為一般只對5個語句以下而頻繁使用的函式宣告為內聯函式,如果有迴圈語句,switch語句,遞迴機制等等複雜語句是絕對不會被置換的。又像有1000行的函式,編譯系統也會忽略你的inline宣告,將其按普通函式處理。

也就是說,當內聯函式中實現過於複雜時,編譯器會將它作為乙個普通函式處理。這是由內聯函式的特殊性所決定的,由於內聯是呼叫處展開的方式,所以編譯器認為只有足夠簡單的函式才可以具有該特性,複雜函式編譯器會放棄內聯特性。

文章摘自

inline函式 C 內聯函式 inline

inline要起作用,必須要與函式定義放在一起,而不是函式的宣告 inline 當編譯器處理呼叫內聯函式的語句時,不會將該語句編譯成函式呼叫的指令,而是直接將整個函式體的 插人呼叫語句處,就像整個函式體在呼叫處被重寫了一遍一樣,在執行時是順序執行,而不會進行跳轉。優點 內聯函式沒有執行函式呼叫的開銷...

C 內聯函式 inline

巨集 就是使用乙個字串來代替乙個表示式 或函式呼叫 編譯之前,預處理器會使用這個巨集字串所代表的表示式 或函式呼叫 來替換所有出現的巨集字串,這樣的話,用巨集表示的函式呼叫 就不用另外開闢函式棧,不用保護和恢復函式呼叫現場,這樣就提高了 的執行效率 所以,呼叫乙個巨集比呼叫乙個函式更有效 但是呼叫巨...

c 內聯函式inline

1.inline原理 在程式編譯時,編譯器將程式中出現的內聯函式的呼叫表示式用內聯函式的函式體來進行替代。採用空間換時間的策略。是以 膨脹 複製 為代價,僅僅省去了函式呼叫的開銷,從而提高函式的執行效率。例如 如果乙個函式被指定為inline函式,則它將在程式中每個呼叫點上被展開。int i 10 ...