在c中,為了解決一些頻繁呼叫的小函式大量消耗棧空間或是叫棧記憶體的問題,特別的引入了inline修飾符,表示為內聯函式。
棧空間就是指放置程式的區域性資料也就是函式內資料的記憶體空間,在系統下,棧空間是有限的,假如頻繁大量的使用就會造成因棧空間不足所造成的程式出錯的問題,函式的死迴圈遞迴呼叫的最終結果就是導致棧記憶體空間枯竭。
下面我們來看乙個例子
[c-sharp]view plain
copy
#include
//函式定義為inline即:內聯函式
inline char
* dbtest(
inta)
intmain()
} 上面的例子就是標準的內聯函式的用法,使用inline修飾帶來的好處我們表面看不出來,其實在內部的工作就是在每個for迴圈的內部任何呼叫dbtest(i)的地方都換成了(i%2>0)?"奇":"偶"這樣就避免了頻繁呼叫函式對棧記憶體重複開闢所帶來的消耗。
inline的使用是有所限制的,inline只適合涵數體內**簡單的涵數使用,不能包含複雜的結構控制語句例如while、switch,並且不能內聯函式本身不能是直接遞迴函式(自己內部還呼叫自己的函式)。
補充:inline函式僅僅是乙個建議,對編譯器的建議,所以最後能否真正內聯,看編譯器的意思,它如果認為函式不複雜,能在呼叫點展開,就會真正內聯,並不是說宣告了內聯就會內聯,宣告內聯只是乙個建議而已.
其次,因為內聯函式要在呼叫點展開,所以編譯器必須隨處可見內聯函式的定義,要不然,就成了非內聯函式的呼叫了.所以,這要求每個呼叫了內聯函式的檔案都出現了該內聯函式的定義。
因此,將內聯函式放在標頭檔案裡實現是合適的,省卻你為每個檔案實現一次的麻煩.而所以宣告跟定義要一致,其實是指,如果在每個檔案裡都實現一次該內聯函式的話,那麼,最好保證每個定義都是一樣的,否則,將會引起未定義的行為,即是說,如果不是每個檔案裡的定義都一樣,那麼,編譯器展開的是哪乙個,那要看具體的編譯器而定.所以,最好將內聯函式定義放在標頭檔案中.
而類中的成員函式預設都是內聯的,如果在類定義時就在類內給出函式,那當然最好.如果在類中未給出成員函式定義,而又想內聯該函式的話,那在類外要加上inline,否則就認為不是內聯的.
為了方便,將內聯函式直接宣告時就定義,放在標頭檔案中.這樣其它檔案包含了該標頭檔案,就在每個檔案都出現了內聯函式的定義.就可以內聯了.
C中關鍵字inline用法
一 什麼是內聯函式 在c語言中,如果一些函式被頻繁的呼叫,不斷地用函式入棧,即函式棧,則會造成棧空間或者棧記憶體的大量消耗,為了解決這個問題,特別的引入了inline關鍵字,表示為內聯函式。棧空間指的是函式內資料的記憶體空間,在乙個系統下,棧空間的資源是有限的,假如頻繁大量的使用就會因棧空間的不足而...
C 中的inline關鍵字
from here 在c c 中,為了解決一些頻繁呼叫的小函式大量消耗棧空間 棧記憶體 的問題,特別的引入了inline修飾符,表示為內聯函式。棧空間就是指放置程式的區域性資料 也就是函式內資料 的記憶體空間。在系統下,棧空間是有限的,假如頻繁大量的使用就會造成因棧空間不足而導致程式出錯的問題,如,...
c語言部分關鍵字簡析
一 sizeof c語言中判斷資料型別或者表示式長度符。用法有 sizeof type name sizeof object sizeof object int i sizeof int sizeof i sizeof i sizeof與strlen strlen計算不包含 0 null 的字串長度...