C inline函式及其與普通函式區別

2021-10-12 16:35:31 字數 1050 閱讀 4507

定義

inline函式,在編譯過程中,省去函式的呼叫開銷,在函式的呼叫點直接展開函式**處理。

規則

inline關鍵字是一定要和函式體定義放在一起得,和宣告結合是沒有作用的。所以又說inline關鍵字是乙個用於實現的關鍵字而不是乙個用於宣告的關鍵字。對於類方法,定義在類體內部的方法自動成為內聯函式。

文字說明太過冗餘我們舉例說明:

sum(int a,

int b)

intmain()

當程式從main開始之後,到了sum()時,實行標準的函式呼叫過程,引數壓棧、sum函式的棧幀開闢、回退等過程,但是sum函式的實現太過簡單,以至於他的消耗甚至是小於標準函式呼叫的消耗,其呼叫指令相對簡單,如果此時我們又需要大量的呼叫sum函式,那伴隨著的就是大量的指令開銷;針對這種浪費情況,「寸土寸金」思想嚴重的開發人員就設計出了inline函式,又稱內聯函式。

內聯函式最重要的作用就是針對函式呼叫開銷大於函式指令開銷的函式體而推出的!實現在編譯階段,將呼叫開銷忽略,直接在函式處進行**展開,且inline函式也就不會再生成函式符號了!

我們寫的類裡面的成員函式就是一種內聯函式;

但是並非所有的inline函式都會被編譯器處理成內聯函式,為什麼呢?

編譯器說:「可以!」。那就代表建議接受了,此時的函式定義會在編譯到時被**體替換。

如果這貨說:「你瞎了?你不看看你發來的定義能展開嘛?」那就說明你的**定義要麼時**體太過龐大不易展開,要麼是**體是個貪得無厭的無底洞,不能展開。

還有一點,在debug版本上,inline是無作用的,只有在release版本下才可以!

看完這篇,總結一下inline函式和普通函式的區別:

1.呼叫開銷的區別

2.**體的差異

內聯函式可以含有迴圈語句 c inline函式

越是簡單的,不常用的,往往最容易被人們忽略。關於內聯這個特性大部分專案中很少用,可能我們太在乎效率,因為專案實際壓力並不是很大,所以我們一般情況是不考慮內聯,只要寫了inline就會成為內聯函式嗎?就有內聯函式效果嗎?你是不是有點懵圈?下面我就來總結下inline函式及特性。先來看段 inline ...

static修飾的變數和函式與普通變數函式的區別

全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有...

static函式與普通函式

全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方 式。這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態 的全域性變數在各個原始檔中都...