C C 程式設計 C語言中的內聯函式

2021-10-12 06:27:06 字數 1721 閱讀 9031

在c語言中,如果一些函式被頻繁呼叫,不斷地有函式入棧,即函式棧,會造成棧空間或棧記憶體的大量消耗。
為了解決這個問題,特別的引入了inline修飾符,表示為內聯函式。

棧空間就是指放置程式的區域性資料也就是函式內資料的記憶體空間,在系統下,棧空間是有限的,假如頻繁大量的使用就會造成因棧空間不足所造成的程式出錯的問題,函式的死迴圈遞迴呼叫的最終結果就是導致棧記憶體空間枯竭。

#include

//函式定義為inline即:內聯函式

1、關鍵字inline 必須與函式定義體放在一起才能使函式成為內聯,僅將inline 放在函式宣告前面不起任何作用。

如下風格的函式foo 不能成為內聯函式:

inline

void

foo(

int x,

int y)

;// inline 僅與函式宣告放在一起 void foo(int x, int y)

而如下風格的函式foo 則成為內聯函式:

void

foo(

int x,

int y)

;inline

void

foo(

int x,

int y)

// inline 與函式定義體放在一起

所以說,inline 是一種「用於實現的關鍵字」,而不是一種「用於宣告的關鍵字」。一般地,使用者可以閱讀函式的宣告,但是看不到函式的定義。儘管在大多數教科書中內聯函式的宣告、定義體前面都加了inline 關鍵字,但我認為inline 不應該出現在函式的宣告中。這個細節雖然不會影響函式的功能,但是體現了高質量c++/c 程式設計風格的乙個基本原則:宣告與定義不可混為一談,使用者沒有必要、也不應該知道函式是否需要內聯。

2、inline的使用是有所限制的

內聯能提高函式的執行效率,為什麼不把所有的函式都定義成內聯函式?如果所有的函式都是內聯函式,還用得著「內聯」這個關鍵字嗎?

內聯是以**膨脹(複製)為代價,僅僅省去了函式呼叫的開銷,從而提高函式的執行效率。如果執行函式體內**的時間,相比於函式呼叫的開銷較大,那麼效率的收

獲會很少。另一方面,每一處內聯函式的呼叫都要複製**,將使程式的總**量增大,消耗更多的記憶體空間。

以下情況不宜使用內聯:

(1)如果函式體內的**比較長,使用內聯將導致記憶體消耗代價較高。

(2)如果函式體內出現迴圈,那麼執行函式體內**的時間要比函式呼叫的開銷大。

乙個好的編譯器將會根據函式的定義體,自動地取消不值得的內聯(這進一步說明了inline 不應該出現在函式的宣告中)。

因此,將內聯函式放在標頭檔案裡實現是合適的,省卻你為每個檔案實現一次的麻煩.而所以宣告跟定義要一致,其實是指,如果在每個檔案裡都實現一次該內聯函式的話,那麼,最好保證每個定義都是一樣的,否則,將會引起未定義的行為,即是說,如果不是每個檔案裡的定義都一樣,那麼,編譯器展開的是哪乙個,那要看具體的編譯器而定.所以,最好將內聯函式定義放在標頭檔案中.

C語言中的內聯函式(總結)

c語言本身不支援內聯函式,但是新的c標準c99中,支援了內聯函式。引入內聯函式的目的是為了提高程式中函式呼叫的效率。函式呼叫,實際上是將程式執行的順序轉移到被呼叫的函式所在的記憶體位址,將函式執行完後,再返回到原來的位址繼續往下執行,因此需要保護現場並記憶執行的位址,還要恢復現場。因此,函式呼叫需要...

c語言中的的內聯 inline 函式

發表於2011 年 01 月 26 日 由 admin c c 中的inline,使用在函式宣告處,表示程式設計師請求編譯器在此函式的被呼叫處將此函式實現插入,而不是像普通函式那樣生成呼叫 申請是否有效取決於編譯器 一般地說,這樣作的優點是省掉了呼叫函式的開銷 缺點則是可能會增加代所生成目標 的尺寸...

c語言中的的內聯 inline 函式

c c 中的inline,使用在函式宣告處,表示程式設計師請求編譯器在此函式的被呼叫處將此函式實現插入,而不是像普通函式那樣生成呼叫 申請是否有效取決於編譯器 一般地說,這樣作的優點是省掉了呼叫函式的開銷 缺點則是可能會增加代所生成目標 的尺寸 二班的除外,二班情況下,inline函式甚至會返過來降...