#
剛剛面世完,上來就問巨集函式和普通函式的區別,整理一下;本文為本人的第一篇部落格,各位大蝦多多指點
巨集函式:在c語言中用的比較多,c++中用的比較少,巨集函式只是在預編譯階段做簡單的替換,所以不會為函式呼叫帶來額外的開銷(不必開闢一段棧空間),沒了這種開銷,就可以提高**執行的效率。但是僅僅簡單的替換也會帶來很多問題。
#define
max(a,b) (a) > (b)? (a) :(b)
int main(void)
不做函式引數的檢查,只做簡單的替換也會帶來很多問題:
eg:int max
=max('a',45);//接受的引數不一樣編譯器也不會報錯
//等價於a的ascll 碼和45比較;
只做簡單的替換:
#include
#define fun(a) a*a*a
int main(void)
但這也帶來了乙個便利:如果比較不同引數的兩個值,不用像普通函式那樣去重新定義函式的引數
int max
=max(34,45);
int max
=max(23.33,23.98)//用同乙個巨集定義可以滿足,不必像普通函式那樣定義兩個函式
**內聯函式:**c++中內聯函式使用相應的函式**代替函式呼叫,不需要開闢棧空間,執行速度比常規函式快,但是代價是占用了過多的記憶體。內聯函式需要檢查函式的引數是否匹配。
內聯函式的宣告用 inline:
inline
int max(int a,int b)
總結:
巨集函式和內聯函式與普通的函式相比不用開闢棧空間,都可以提高**執行的效率,兩者都要求函式的**量較小,但是巨集函式只做簡單的替換,不檢查函式引數型別是否匹配;內聯函式匹配函式引數,在函式呼叫處替換函式的**。
巨集定義函式 普通函式 內聯函式區別
巨集定義函式 例子 單行 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,並且內聯函式本身不能直接呼叫自身...