inline修飾函式

2021-07-06 02:05:59 字數 472 閱讀 4510

比如 

int g(int x)

int f()

這樣f會呼叫g,然後g返回x + x給f,然後f繼續把那個值返回給呼叫者。

如果g是inline的話。f會被直接編譯成。

int f()

相當於把g執行的操作直接融合到f裡。這樣減少了呼叫g消耗的時間,但同時也增大了f的尺寸。

這就是inline函式,也就是所謂的內聯函式。

---------

但是現在不是這樣了。

現在的編譯器會自動決定是否對函式進行上面的操作,而不是根據你前面加不加inline。

但是inline本身還是有另外乙個意義:

乙個可執行檔案的cpp檔案中乙個函式只能被定義一次。如果你把函式定義在乙個.h檔案中並讓兩個cpp包含就會造成這個函式分別在兩個cpp中被定義產生錯誤。但是inline函式是允許在多個cpp中多次定義的,就解決了這個問題。

C C 的 inline關鍵字修飾的函式

inline 與巨集的區別 巨集是在與預編譯階段處理的,沒有型別和安全檢查 而inline是在編譯階段處理的,有型別和安全檢查。也可以說,inline是一種更安全的巨集。與static修飾函式的區別 static修飾的函式有開棧和清棧的開銷,inline沒有。缺陷inline修飾的函式在呼叫點直接將...

inline函式 C 內聯函式 inline

inline要起作用,必須要與函式定義放在一起,而不是函式的宣告 inline 當編譯器處理呼叫內聯函式的語句時,不會將該語句編譯成函式呼叫的指令,而是直接將整個函式體的 插人呼叫語句處,就像整個函式體在呼叫處被重寫了一遍一樣,在執行時是順序執行,而不會進行跳轉。優點 內聯函式沒有執行函式呼叫的開銷...

inline 內聯函式

一 inline關鍵字用來定義乙個類的內聯函式,引入它的主要原因是用它替代c中表示式形式的巨集定義。表示式形式的巨集定義一例 define expressionname var1,var2 var1 var2 var1 var2 為什麼要取代這種形式呢,且聽我道來 1 首先談一下在c中使用這種形式巨...