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

2021-07-02 03:37:40 字數 951 閱讀 7238

#

剛剛面世完,上來就問巨集函式和普通函式的區別,整理一下;本文為本人的第一篇部落格,各位大蝦多多指點

巨集函式:在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,並且內聯函式本身不能直接呼叫自身...