C 之內聯函式

2021-08-08 09:39:51 字數 1159 閱讀 4156

內聯函式是一種特殊的函式,具有普通函式的特徵(引數檢查,返回型別等)

內聯函式是對編譯器的一種請求,因此編譯器可能拒絕這種請求

內聯函式由 編譯器處理,直接將編譯後的函式體插入呼叫的地方

巨集**片段 由預處理器處理, 進行簡單的文字替換,沒有任何編譯過程

注:內聯函式宣告時inline關鍵字必須和函式定義結合在一起,否則編譯器會直接忽略內聯請求。

c++中內聯編譯的限制:

不能存在任何形式的迴圈語句

不能存在過多的條件判斷語句

函式體不能過於龐大

不能對函式進行取址操作

函式內聯宣告必須在呼叫語句之前

編譯器對於內聯函式的限制並不是絕對的,內聯函式相對於普通函式的優勢只是省去了函式呼叫時壓棧,跳轉和返回的開銷。

因此,當函式體的執行開銷遠大於壓棧,跳轉和返回所用的開銷時,那麼內聯將無意義

// 內聯函式代替巨集函式

// 在普通函式前加 關鍵字 inline 將函式變成內聯函式

// inline 必須要和函式定義放一起,如果和函式宣告放一起會被忽略

// define 是預處理器處理的 inline 是編譯器處理的

// define 沒有函式引數檢測,返回檢測,作用域檢測,inline 工作方式像乙個函式

// 所以會有引數型別檢測等

// inline是向請求在呼叫該函式的時候進行函式體的替換,編譯器可能拒絕內聯請求

// 如果內聯成功,編譯完以後**是沒有這一段函式的

// 內聯函式函式體不能過長,最好不要超過 5 行

// 不能有迴圈語句,複雜的 if 語句

// 不能對內聯函式進行取位址操作

inline

int max(int a, int b)

int main7_2()

int main7_1()

C 之內聯函式

一 目的 提高程式執行速度所做的一項改進。二 內聯函式與常規函式的區別 編譯過程的最終產品是程式 由一組機器語言指令組成。執行程式時作業系統將這些指令載入到計算機記憶體中,因此每條指令都有特有的記憶體位址。計算機隨後逐步執行這些命令。執行到函式呼叫指令時,程式將在函式呼叫後立即儲存該指令的記憶體位址...

c 之內聯函式

若有不對,歡迎道友予以指正,提前謝過。內聯函式 定義時需要關鍵字inline。實際上是和巨集定義一般,在呼叫函式的地方,用函式體進行替換。inline需要在函式定義的時候加入才有效,在宣告的時候不需要 而類宣告中的成員函式自動成為內聯函式。tip 只有當函式只有 10 行甚至更少時才將其定義為內聯函...

c 之內聯函式

定義 c 內聯函式是通常與類一起使用。如果乙個函式是內聯的,那麼在編譯時,編譯器會把該函式的 副本放置在每個呼叫該函式的地方。以inline修飾的函式叫內聯函式。編譯時c 編譯器會在呼叫內聯函式的地方展開,沒有函式壓棧的開銷,內聯函式提公升程式執行的效率。如果想把乙個函式定義為內聯函式,則需要在函式...