一、內聯函式 :內聯函式是指用inline關鍵字修飾的函式
它與普通函式所不同之處只在於函式呼叫的處理。普通
函式進行呼叫時,要將程式執行權轉到被呼叫函式中,然後再返回到呼叫它的函式中;
內聯函式不是在呼叫時發生執行權轉移,而是在編譯時將「函式
體」嵌入在每乙個呼叫處。
編譯時類似巨集替換,使用
函式體替換呼叫處的函式名。
呼叫幾次就替換幾次,
這樣省去了函式呼叫時的一些額外開銷,比如儲存和恢復函式返回位址等,可以加快速度。
不過呼叫次數多的話,會使可執行檔案變大,這樣會降低速度。
二、static inline :使用的inline函式大多被定義為static 型別。
static inline的內聯函式,一般情況下不會產生函式本身的**,而是全部被嵌入在被呼叫的地方。如果不加static,則表示該函式有可能會被其他編譯單元所呼叫,所以一定會產生函式本身的**。所以加了static,一般可令可執行檔案變小。一般很少只用inline的情況,都是使用static inline。
三、在使用內聯函式時,應注意如下幾點:
內聯函式是用來消除
函式呼叫
時的時間開銷。它通常用於頻繁執行的函式。
適合於只有1~5行的小函式。對乙個含有許多語句的大函式,函式呼叫和返回的開銷相對來說微不足道,所以也沒有必要用內聯函式實現
。在內聯函式內不允許用迴圈語句和開關語句。如果內聯函式有這些語句,則編譯將該函式視同普通函式那樣產生函式呼叫**,遞迴函式(自己呼叫自己的函式)是不能被用來做內聯函式的。
內聯函式的定義必須出現在內聯函式第一次被呼叫之前。
inline 內聯函式
一 inline關鍵字用來定義乙個類的內聯函式,引入它的主要原因是用它替代c中表示式形式的巨集定義。表示式形式的巨集定義一例 define expressionname var1,var2 var1 var2 var1 var2 為什麼要取代這種形式呢,且聽我道來 1 首先談一下在c中使用這種形式巨...
inline內聯函式
技術類筆試題50 都會問巨集與inline的區別,自己去找找看?1 巨集替換發生在預編譯 2 巨集函式 如果可以這麼叫的話 替換時不會檢查引數,inline函式會檢查 3 巨集一定會發生替換,inline貌似不是強制的,編譯器想不替換也沒關係 4 巨集替換時存在著一些不可避免的陷阱 參見c trap...
inline內聯函式
demo 帶引數的巨集 define myfunc a,b a b a b inline int myfunc int a,int b int main1402 說明1 必須inline int myfunc int a,int b 和函式體的實現,寫在一塊 說明2c 編譯器可以將乙個函式進行內聯編...