c語言中的的內聯 inline 函式

2021-06-03 23:36:17 字數 1130 閱讀 6376

發表於2011 年 01 月 26 日  由

admin

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

實際上,即使沒有手工指定inline函式,編譯器一般還會選擇一些**量較小但使用頻繁的函式作為inline函式,以此作為效能優化的途徑之一。

1. 和帶參巨集定義(parameterized macro)的比較

與帶參巨集定義相比,inline函式具備以下優點:

2. 不同編譯器下的inline關鍵字

儘管c/c++有著自己的語言標準和規範,但不同編譯器實現中總會有著這樣或那樣的區別。inline即是一例。

c99標準

簡單地說,c99中inline關鍵字申明的函式一般僅用於同一檔案,函式本身不會生成單獨的目標**;static關鍵字修訂後,如果需要,則會生成單獨的目標**。

gcc

gcc中的inline關鍵字與c99中不同,預設情況下(僅使用inline),在同一檔案中被呼叫處當作內聯函式展開,而在外部檔案呼叫中等同於普通extern函式(也就是說會生成單獨的目標**);加static關鍵字修訂後,反而不可應用於外部檔案,但如果需要可以生成單獨的目標**;gcc擴充套件的extern inline模式更是縮小函式的使用僅限於在同檔案中展開。

ms vc

ms vc中

inline的含義基本與c99中相同,此基礎上,作了一定擴充套件

3. 其他

一般地,內聯函式不能是遞迴函式或呼叫遞迴函式(遞迴呼叫會給函式體展開帶來麻煩)。

inline應當是用於函式宣告(declaration)而非函式實現(implementation)。但由於由於不同的編譯器下inline關鍵字所修飾函式的呼叫範圍不一致,因此,一種簡單的作法是,將inline函式的宣告和實現合一。如果確定函式僅應用於同一檔案,我們可以將函式的宣告和實現都放在.c/.cpp中;否則將其放入.h中(這樣,包含了此標頭檔案的任何檔案都可以使用它)。

c語言中的的內聯 inline 函式

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

C語言中的Inline內聯函式解析

在c語言中,為了解決一些頻繁呼叫的小函式大量消耗棧空間或是叫棧記憶體的問題,特別的引入了inline修飾符,表示為內聯函式。棧空間就是指放置程式的區域性資料也就是函式內資料的記憶體空間。那麼在系統下,棧空間是有限的,假如頻繁大量的使用就會造成因棧空間不足所造成的程式出錯的問題 比如函式的死迴圈遞迴呼...

c語言中的inline

在c中,為了解決一些頻繁呼叫的小函式大量消耗棧空間或是叫棧記憶體的問題,特別的引入了inline修飾符,表示為內聯函式。棧空間就是指放置程式的區域性資料也就是函式內資料的記憶體空間,在系統下,棧空間是有限的,假如頻繁大量的使用就會造成因棧空間不足所造成的程式出錯的問題,函式的死迴圈遞迴呼叫的最終結果...