03 內聯函式

2021-10-13 07:27:16 字數 1568 閱讀 8942

產生原因

c 語言中有巨集函式的概念。巨集函式的特點是內嵌到呼叫**中去,避免了函式呼叫的開銷。但是由於巨集函式的處理發生在預處理階段,缺失了語法檢測和有可能帶來的語意差

錯。優缺點

巨集函式普通函式

優點內嵌**,闢免壓棧與出棧的開銷。

高度抽象,避免重複開發,型別檢查

缺點**替換,易使生成**體積變大,

易產生邏輯錯誤, 無型別檢查

壓棧與出棧,帶來開銷

**示例

#include

/** * 巨集函式和普通函式

*/using

namespace std;

// 定義巨集函式

#define sqr(x) ((x)*(x))

// 定義sqr函式

intsqr

(int x)

intmain()

return0;

}

程式執行結果

在c++中const常量可以替代巨集常數定義。

const inta =3;

== #define a3

內聯函式定義
c++編譯器可以將乙個函式進行內聯編譯,被c++編譯器內聯編譯的函式叫做內聯函式
特點

c++中推薦使用內聯函式替代巨集**片段,c++中**使用inline關鍵字宣告內聯函式**。

**示例

inline

intfunc

(int a,int b)

注意:

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

**示例

#include

using

namespace std;

// 定義巨集函式

#define func(a, b) ((a) < (b) ? (a) : (b))

// 呼叫內聯函式

inline

intfunction

(int a,

int b)

intmain

(int argc,

char

*ar**)

程式執行結果

注意事項

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

不能存在任何形式的迴圈語句,不能存在過多的條件判斷語句。函式體不能過於龐大,不能對函式進行取址操作。

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

C 內聯函式 03

在c 中我們通常定義以下函式來求兩個整數的最大值 如下 int max int a,int b 為這麼乙個小的操作定義乙個函式的好處有 容易閱讀和理解函式 max 的呼叫,要比讀一條等價的條件表示式並解釋它的含義要容易得多 如果需要做任何修改,修改函式要比找出並修改每一處等價表示式容易得多 使用函式...

mysql 內聯函式 Kotlin內聯函式

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

函式之內聯函式

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