內聯函式(inline function)那些事

2021-10-05 20:34:20 字數 1831 閱讀 5991

內聯函式(inline)

內聯函式對於一般的人來說,沒什麼可講的,就那麼回事(反正就有那種說不清的感覺)。有這種想法的人似乎和我一樣都是菜鳥級別的吧!

今天看到乙個面試題:

講一下內聯函式的含義:(面試題)

將以下**改為c語言**,要求在.c檔案中能編譯通過(要提交.c檔案)

/*

將以下**改為c語言**,要求在.c檔案中能編譯通過(要提交.c檔案)

*/#includeusing namespace std;

inline float max(float c1, float c2)

int main()

呃呃這要怎麼講???從**講,腦子裡有東西,但是說不清。(在我這裡說不清就是不會)因此再一次學習inline函式,到網上查資料,有收穫。

【參考:內聯函式維基百科】

接下來就從維基百科的定義中找到答案。

這句話的資訊量非常大,首先內聯函式就是編譯時期展開函式。(他說出了內聯函式的作用時機,以及他的作用形式)

作用時機---------------------------------編譯時。

作用形式--------------------------------展開函式(將函式展開)。

注意:編譯原理

建立乙個可執行的目標程式:一般分為經歷一下4個過程。

2)也就是說建議編譯器將指定的函式體插入並取代每一處呼叫該函式的地方

內聯實質--------------------------------函式替換。

注意:

建議-------------------------------------雖然程式設計師將函式申請為inline函式,但是是否真正成為inline函式,不一定。

函式體----------------------------------上面提到的是將函式體插入到呼叫該函式的地方,是函式體,體體體,重要的事情說三遍。

3)c++引入內聯函式的目的

節省了每次呼叫函式帶來的額外時間開支。

4)盡量用inline、const、enum替換 #define

盡量用編譯器替換預處理。

a)#define巨集預處理階段進行粗暴替換,不進行語法檢查,而inline函式是在編譯器階段進行的替換,接受語法,語義的檢查。相對更安全。#define 的錯誤一般很難最查到。

總結:通過以上對內聯函式(inline function)的講解,是否心中已經有了上面面試提的答案了呢。

#includeusing namespace std;

//inline float max(float c1, float c2)

//#define max(x,y) (x > y ? x : y)

int main()

mysql 內聯函式 Kotlin內聯函式

內聯函式使用關鍵字內聯宣告,內聯函式的使用增強了高階函式的效能。內聯函式告訴編譯器將引數和函式複製到呼叫站點。虛函式或區域性函式不能宣告為內聯。以下是內聯函式內部不支援的一些表示式和宣告 區域性類宣告 內部巢狀類的宣告 函式表示式 宣告區域性函式 區域性可選引數的預設值 讓我們看一下內聯函式的基本示...

函式之內聯函式

內聯函式 定義 內聯函式是c 為提高程式執行速度所進行的一項改進。常規函式與內聯函式之間的區別不在於編寫方式,而在於c 編譯器如何將他們組合到程式裡。c 函式的編譯 與其他程式的 內聯 了起來,也就是說,編譯器將使用相應的函式 代替函式呼叫。對於內聯函式,程式無需調到另乙個位置處執行 再跳回來,因此...

內聯函式 虛函式

在c 中,inline關鍵字和virtual關鍵字分別用來定義c 中的內聯函式和虛函式,他們在各自的場合都有其各自的應用,下面將簡單介紹他們各自的功能,然後在說明為什麼乙個函式不能同時是虛函式和內聯函式 inline 內聯函式的目的是為了減少函式呼叫時間。它是把內聯函式的函式體在編譯器預處理的時候替...