以下例子均是在比較老的gcc中比較普遍的例子,只是方便理解,實際上gcc等編譯器現在已經能夠識別部分短小函式自動將其變為內聯函式。
int g(int x)
int f()
這樣f函式會呼叫g函式,g函式將x+x的值返回給f,然後f返回該返回值
但如果g是inline函式的話(內聯函式)
int
inline g(int x)
int f()
那麼實際編譯結果是
int f()
這裡實際就相當於把g()函式的**直接融合到f函式中,這樣就會減少呼叫g函式的時間,從而提公升效率
雖然缺點會增加f函式編譯後的長度,所以inline函式不能過長
前面有說到實際上編譯器可以自動將短小的可以內聯的函式自動內聯,並不是只有前面帶有inline標識的函式才會將其視作內聯函式在這裡不禁要感嘆一下編譯器的超級強大的功能
但是inline本身還是有另外乙個區別
乙個可執行檔案的源**中,同乙個函式只能被定義一次;所以,你如果把函式定義放在.h標頭檔案中,然後有兩個.c原始檔同時包含該標頭檔案,就會出現函式重複定義的錯誤,但是,如果將該函式宣告為inline函式,則不會報錯。
內聯函式(inline)與普通函式的區別
內聯函式是 被插入到呼叫者 處的函式。如同 define 巨集,內聯函式通過避免被呼叫的開銷來提高執行效率,尤其是它能夠通過呼叫 過程化整合 被編譯器優化。內 聯函式和巨集很類似,而區別在於,巨集是由預處理器對巨集進行替代,而內聯函式是通過編譯器控制來實現的。而且內聯函式是真正的函式,只是在需要用到...
inline函式 C 內聯函式 inline
inline要起作用,必須要與函式定義放在一起,而不是函式的宣告 inline 當編譯器處理呼叫內聯函式的語句時,不會將該語句編譯成函式呼叫的指令,而是直接將整個函式體的 插人呼叫語句處,就像整個函式體在呼叫處被重寫了一遍一樣,在執行時是順序執行,而不會進行跳轉。優點 內聯函式沒有執行函式呼叫的開銷...
static函式與普通函式
全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方 式。這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態 的全域性變數在各個原始檔中都...