#define 巨集函式,為什麼能夠提高效能?
阿新 • • 發佈:2019-01-07
#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)巨集定義末尾不加分號;