1 函式的呼叫必須將程式執行的順序轉移到存放函式所的位址,將函式的程式內容執行完成後,再次轉到執行該函式的地方,這種轉移操作要求執行前儲存現場,並記憶執行的位址。因此函式呼叫有一定的時間和空間開銷,影響效率。
2 巨集只是在預處理的地方把**展開,不需要額外的位址和空間。所以巨集比函式呼叫更有效率。
但是巨集也有不足。例如巨集的定義容易產生二義性。
舉個例子
#define square(x) (x*x)
我們用乙個數字去呼叫它,square(5),這樣看上去沒有什麼錯誤,結果返回25,是正確的,但是如果我們用squre (5+5)去呼叫的話,我們期望的結果是100,而巨集的呼叫結果是(5+5*5+5),結果是35,這顯然不是我們要得到的結果。避免這些錯誤的方法,一是給巨集的引數都加上括號。
#define square(x) ((x)*(x))
3 內聯函式(inline)
內聯函式和巨集很類似,通過把**插入到呼叫者**處的函式。內聯函式和巨集的區別在於巨集是由預處理器對巨集進行替代,而內聯函式通過編譯器控制來實現的。內斂函式是真正的函式,只是在需要用到的時候內聯函式像巨集一樣的展開,所以取消了函式的引數壓棧,減少了呼叫的開銷。
當然內聯函式的**不能太多了,如果,內聯函式的函式體過大,一般的編譯器會放棄內聯方式
C inline內建函式
呼叫函式時需要一定的時間,如果有的函式需要頻繁使用,則累計所用時間會很長,從而降低程式的執行效率。c 提供了一種提高效率的方法,即在編譯時將所呼叫的函式 嵌入到主函式中。這種嵌入到主函式中的函式被稱為內建函式 inline function 又稱為內嵌函式。指定內建函式的方法很簡單,只須在函式首行的...
C inline 內聯函式
內聯函式 1 內聯函式定義和作用 將乙個函式宣告為inline,那麼函式就成為內聯函式。內聯函式通常就是它在程式中每個呼叫點上 內聯地 展開。從定義上看,內聯函式跟一般函式不一樣,一般函式呼叫的時候是需要呼叫開銷的 比如出棧入棧等操作 內聯函式從定義上看更像是巨集,但是跟巨集不一樣。內聯函式的作用主...
C inline內連函式
1.內聯函式 在c 中我們通常定義以下函式來求兩個整數的最大值 複製 如下 int max int a,int b 為這麼乙個小的操作定義乙個函式的好處有 閱讀和理解函式 max 的呼叫,要比讀一條等價的條件表示式並解釋它的含義要容易得多 如果需要做任何修改,修改函式要比找出並修改每一處等價表示式容...