巨集定義 內聯函式 普通函式的區別

2021-07-22 06:38:07 字數 765 閱讀 9212

巨集定義和內聯函式的區別:

第一:巨集定義時在預處理階段進行**替換,而內聯函式在編譯階段進行**替換。

第二:巨集定義沒有型別檢查,而內聯函式有型別檢查。

內聯函式和普通函式最大的區別是在內部實現方面上:

普通函式在被呼叫時,系統首先要跳躍到該函式的入口位址,執行函式體,執行完成後,再返回到函式呼叫的地方,函式始終只有乙個複製;而內聯函式則不需要乙個定址過程,當執行到內聯函式時,內聯函式像巨集一樣展開,如果在n處呼叫了內聯函式,則此函式就會有n個**段的複製。編譯器會在內聯函式呼叫的地方,將內聯函式的內容展開,避免了函式呼叫的開銷,又沒有巨集機制的缺陷。執行速度比一般的函式執行速度要快。

內聯函式本身不能直接呼叫遞迴函式。只適合函式體內簡單**的使用。

任何在類的說明部分定義的函式都會被自動的認為是內聯函式。內聯函式必須是函式體宣告在一起,才有效。像這樣的的宣告 inline function(int i)是沒有效果的,編譯器只是把函式作為普通函式的宣告,我們必須定義函式體。

內聯函式的呼叫必須出現在第一次被呼叫之前。

在類的內部定義了函式體的函式,被預設是內聯函式,而不管是否有inline關鍵字修飾。

內聯函式也有一定的侷限性,如果函式體過大,編譯器會放棄內聯方式,而採用普通的方式呼叫函式。內聯函式是以增加空間的消耗為代價的,是否需要inline函式就需要根據實際情況取捨。

inline一般只用於如下情況:

1) 乙個函式不斷被重複呼叫。

2)函式只有簡單的幾行,且函式不包含for、while、switch語句。

巨集定義函式 普通函式 內聯函式區別

巨集定義函式 例子 單行 define max a,b a b a b 多行 define malloc n,type type malloc n sizeof type 對於第乙個函式,如果用普通函式,該怎樣寫?int max int a,int b 很顯然,我們不會選擇用函式來完成這個任務,原因...

巨集定義 內聯函式 普通函式的區別

一 巨集定義和內聯函式的區別 1.巨集定義不是函式,但是使用起來像函式。預處理器用複製巨集 的方式代替函式的呼叫,省去了函式壓棧退棧過程,提高了效率。內聯函式本質上是乙個函式,內聯函式一般用於函式體的 比較簡單的函式,不能包含複雜的控制語句,while switch,並且內聯函式本身不能直接呼叫自身...

內聯函式 普通函式 巨集定義

對於乙個頻繁使用的短小函式,c用巨集定義,c 用inline實現。一 巨集定義和內聯函式 內聯函式和普通函式的區別 1 巨集定義只是普通的文字替換,巨集定義是沒有型別檢查的,無論對還是錯都是直接替換。所以巨集替換容易出錯,直接替換會產生符號的優先順序的問題會一些意想不到的結果。內聯函式在編譯的時候會...