(一 二)內聯函式

2021-09-23 22:48:10 字數 2207 閱讀 9130

元旦了,各種打不開部落格。元旦結束,部落格好了,是因為元旦放假程式設計師都回家了嘛?

內聯函式和普通函式有所區別。

普通函式需要①函式定義②函式原型③函式呼叫,具體呼叫形式是,先呼叫時,儲存當前函式的記憶體位址(假設為位址a

),然後呼叫函式,跳到被呼叫函式的記憶體位址(位址

b),然後在位址

b處依次執行,等執行完被呼叫的函式(或許還有返回值),再返回之前儲存的位址a處。

內聯函式,可以省略②函式原型(也可以不省略),但需要在函式定義和函式原型的函式頭之前加上關鍵字inline

(如果省略函式原型的話,則一般將函式定義放在函式原型的地方),

他的機制,是把函式**,放在函式呼叫時的記憶體位址處,這樣的話,無需像普通函式那樣,從位址a

處跳到位址

b處,呼叫完再跳回來,而是位址

a處之後的記憶體位置,就是原本是位址

b處函式的**內容。就像直接將函式命令放在呼叫處一樣。

例如:int main()

;這樣的形式。

由於內聯函式是直接放在main

函式中(而不是呼叫的時候才占用記憶體),因此,使用內聯函式更耗費記憶體。但相對而言,使用內聯函式的優點則是速度更快(因為不用在記憶體之中跳來跳去)。

但,由於在記憶體位址中跳來跳去速度其實很快,所以節省的時間的絕對值,並不大,除非該函式經常被呼叫(每次節約0.01

秒,100

次就是1

秒了)。

內聯函式的優點:速度更快——適合執行**時間很短的函式;

編譯器不允許使用內聯函式的兩種情況:

①遞迴函式——內聯函式不允許自己呼叫自己;

②函式過大。

內聯函式的使用方式:

①在函式原型和函式定義的函式頭之前加上關鍵字inline

即可;

②可省略函式原型,若省略,則將函式定義放置於函式原型處較好;

③其他同普通函式。

如**:

#includeinline int chengfang(int a)	//函式定義前置於函式原型處,並可省略函式原型

int main()

輸出:

b = 4. c = 25

與內聯函式對應的巨集:

在c語言中,使用預處理器語句

#define

來提供巨集——內聯**的原始實現。

例如巨集:#define squar(x) x*x;

巨集的特點是文字替換,而不像內聯函式那樣是函式呼叫——也就意味著,沒有括號的情況下,結果和內聯函式的結果不同。

如define

的**:

#include#define square(x)	x*x;

int main()

輸出:

a[0] = 1

a[1] = 4

a[2] = 16

a[3] = 8

a[4] = 2

請按任意鍵繼續. . .

使用內聯函式的**:

#includeinline int square(int x) 

int main()

輸出:

a[0] = 1

a[1] = 4

a[2] = 16

a[3] = 16

a[4] = 4

請按任意鍵繼續. . .

由上述兩個例子可以看出,#define

巨集的效果,和

inline

內聯函式的機制完全不同。

#define是文字替換,將括號裡的內容直接賦值到表示式之中——而不是括號裡表示式的結果。

inline是像函式呼叫那樣,將表示式的值得出值的結果後,再放入函式內部的表示式之中。

特別是比如說:#define mm(m) m*m*m; 這樣的巨集,

當遇見呼叫int a=1; int b=mm(a++);時,

在**中,b=1*2*3=6,

而不是內聯函式的b=1*1*1

(因為a++

是先執行完這行**之後,

a=a+1);

mysql 內聯函式 Kotlin內聯函式

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

函式之內聯函式

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

內聯函式 虛函式

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