1. 程式人生 > >#define 巨集函式,為什麼能夠提高效能?

#define 巨集函式,為什麼能夠提高效能?

#define S(a,b) a*b    //正確的巨集定義是#define S(r) ((r)*(r)) 
area=S(3,2);第一步被換為area=a*b; ,第二步被換為area=3*2;  類似於函式呼叫,有一個啞實結合的過程: 
預處理(預編譯)工作也叫做巨集展開:在編譯之前,就將巨集名替換為字串。 

優點:巨集 ——
1)程式碼在預處理期被簡單文字替換, 類似於C++的行內函數;

巨集替換隻作替換,不做計算,不做表示式求解 . what's mean?

2)可完成函式呼叫的功能,又能減少系統開銷,提高執行效率。
巨集是在預編譯時執行的,而函式是在執行時執行的。
在預處理階段即進行了巨集展開(巨集替換),在執行時不需要轉換,即在當地執行
巨集定義不分配記憶體,變數定義分配記憶體。
巨集定義不存在型別問題,它的引數也是無型別的。[

3)函式呼叫在編譯後程序執行時進行,並且分配記憶體。巨集替換在編譯前進行,不分配記憶體 .巨集展開不佔執行時間,只佔編譯時間,函式呼叫佔執行時間(分配記憶體、保留現場、值傳遞、返回值)

缺點:

1)所佔用的目的碼空間相對較大。犧牲空間來換取時間 ,函式體很大時不要#define,否則空間時間都得不到

2)不方便除錯


注意:
1)巨集名和引數的括號間不能有空格

#define SQU ARE(x) ((x) * (x))  ——————錯
#define SQUARE(x   ) ((x) * (x)) ——————錯
2)巨集定義末尾不加分號;