在函式名字前面加上inline,該函式就被宣告為內建函式。每當程式中出現對該函式的呼叫時,c++編譯器使用函式體中的代
碼插入到呼叫該函式的語句之處,而不是將流程轉出去,同時用實參代替形參,以便在程式執行時不再進行函式呼叫。
引入內建函式的目的就是:消除函式呼叫時系統開銷,以提高執行速度。減少程式執行過程中對cpu的中斷次數。
我們知道,在程式執行過程中呼叫函式時,系統要將程式當前的一些狀態資訊存到棧中,同時轉到函式的**處去執行函式體
語句(此過程為中斷),這些引數儲存和傳遞的過程中需要時間和空間的開銷,使得程式的效率降低,特別是在程式頻繁呼叫
函式時,這個問
題會更嚴重。
使用內建函式是一種空間換時間的措施,若內建函式過長,且呼叫太頻繁時,目標程式將加長很多,因此通常只有較短的函式
才定義為內建函式。而在內建函式中一般不能有迴圈語句和開關語句。
為什麼內建函式不能有while,switch,遞迴等等複雜的語句 ?
其實不是不能有,而是有了也沒有用,因為一般只對5個語句以下而頻繁使用的函式宣告為內聯函式,如果有迴圈語句,
switch語
句,遞迴機制等等複雜語句是絕對不會被置換的。又像有
1000行的函式,編譯系統也會忽略你的inline宣告,將其按
普通函式處理。
也就是說,當內聯函式中實現過於複雜時,編譯器會將它作為乙個普通函式處理。這是由內聯函式的特殊性所決定的,由於內
聯是呼叫處展開的方式,所以編譯器認為只有足夠簡單的函式才可以具有該特性,複雜函式編譯器會放棄內聯特性。
C 中的inline函式
1 inline函式的處理流程 在函式的呼叫點直接進行 的替換。2 inline函式和普通函式的區別 1 普通函式有函式的堆疊和清棧。2 inline函式由於 的直接展開,所以沒有堆疊和清棧,效率會更高。3 inline函式和巨集的區別 1 巨集在預編譯階段,沒有型別和安全檢查。2 inline函式...
C 中的inLine函式
一 inline函式 摘自c primer的第三版 在函式宣告或定義中函式返回型別前加上關鍵字inline即把min 指定為內聯。inline int min int first,int secend inline 函式對編譯器而言必須是可見的,以便它能夠在呼叫點內展開該函式。與非inline函式不...
inline函式 C 內聯函式 inline
inline要起作用,必須要與函式定義放在一起,而不是函式的宣告 inline 當編譯器處理呼叫內聯函式的語句時,不會將該語句編譯成函式呼叫的指令,而是直接將整個函式體的 插人呼叫語句處,就像整個函式體在呼叫處被重寫了一遍一樣,在執行時是順序執行,而不會進行跳轉。優點 內聯函式沒有執行函式呼叫的開銷...