帶參數的宏與函數的不同

#define  Pi 3.1415926

#define S(r) PI*r*r

(1)函數調用時,先求出實參表達式的值,然後代入形參,而使用帶參數的宏只是進行簡單的字符替換。例如S(a+b),在宏展開時並不求a+b的值,而只將實參字符“a+b替換形參r”

(2)函數調用是在程序運行時處理的,爲形參分配臨時的內存單元。而宏展開則是在編譯前進行的,在展開時並不分配內存單元,不進行值的傳遞處理,也沒有“返回值”的概念。

(3)對函數中的實參和形參都要定義類型,二者的類型要求一致,如不一致,應進行類型轉換。而宏不存在類型問題,宏名無類型,它的參數也無類型,只是一個符號代表,展開時代入指定的字符串即可。宏定義時,字符串可以是任何類型的數據。

(4)函數調用只可得到一個返回值,而宏可以設法得到多個結果。

#define PI 3.1415926

#define CIRCLE(R,L,S,V)  L=2*PI*R;S=PI*R*R;V=4.0/3.0*PI*R*R*R

(5)使用宏次數多時,宏展開後源程序變長,因爲每展開一次都使得程序增長,而函數調用不會使源程序變長。

(6)宏替換不佔運行時間,只佔編譯時間。而函數調用則佔用運行時間(分配單元、保留現場、值傳遞、返回)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章