內聯函式inline

2021-07-31 10:50:01 字數 1392 閱讀 3389

一、什麼是inline函式

定義:當編譯器發現某段**在呼叫inline函式時,它不是去呼叫該函式,而是將該函式的**整段插入當前位置。

優點:省去了函式呼叫過程式程,加快執行速率。

缺點:每當**呼叫內聯函式,就需要在呼叫處直接插入一段該函式**,所以程式的體積將增大。

拿生活現象比喻,就像電視壞了,通過**找修理工來,你會嫌慢,於是乾脆在家裡養了乙個修理工。這樣當然是快了,不過,修理工住在你家可就要占地兒了。

二、inline 函式的宣告或定義

簡單一句話,在函式宣告或定義前加乙個 inline 修飾符

inline int max(int a, int b)

內聯函式的本質是,節省時間但是消耗空間

三、內聯函式使用規則

(1)乙個函式自己可以呼叫自己,稱為遞迴呼叫,含有遞迴呼叫的函式不能設定為inline函式

(2)使用了複雜流程控制語句:迴圈語句,switch語句,無法設定為inline函式

(3)inline增加體積的特性,建議inline函式內的**很短小,不超過5行

(4)、inline僅做為一種「請求」,特定的情況下,編譯器將不理會inline關鍵字,而強制讓函式成為普通函式。出現這種情況,編譯器會給出警告訊息。

(5)、在你呼叫乙個內聯函式之前,這個函式一定要在之前有宣告或已定義為inline,如果在前面宣告為普通函式,而在呼叫**後面才定義為乙個inline函式,程式可以通過編譯,但該函式沒有實現inline。比如下面**片段:

//函式一開始沒有被宣告為inline:

void foo();

//然後就有**呼叫它:

foo();

//在呼叫後才有定義函式為inline:

inline void foo()

**是的foo()函式最終沒有實現inline;

(6)、為了除錯方便,在程式處於除錯階段時,所有內聯函式都不被實現。

三、使用內聯函式時應注意以下幾個問題:

(1) 在乙個檔案中定義的內聯函式不能在另乙個檔案中使用。它們通常放在標頭檔案中共享。

(2) 內聯函式應該簡潔,只有幾個語句,如果語句較多,不適合於定義為內聯函式。

(3) 內聯函式體中,不能有迴圈語句、if語句或switch語句,否則,函式定義時即使有inline關鍵字,編譯器也會把該函式作為非內聯函式處理。 所以不是所有加上inline關鍵字的函式都能作為inline函式對待,系統將根據函式的大小來決定是否作為inline函式處理

(4) 內聯函式要在函式被呼叫之前宣告。關鍵字inline 必須與函式定義體放在一起才能使函式成為內聯,僅將inline 放在函式宣告前面不起任何作用。

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關鍵字修飾的函式 它與普通函式所不同之處只在於函式呼叫的處理。普通 函式進行呼叫時,要將程式執行權轉到被呼叫函式中,然後再返回到呼叫它的函式中 內聯函式不是在呼叫時發生執行權轉移,而是在編譯時將 函式 體 嵌入在每乙個呼叫處。編譯時類似巨集替換,使用 函式體替...