巨集定義自身的缺陷是指巨集展開錯誤,主要是由於運算子優先順序等原因,使得巨集展開後的語義與餘項發生偏差。
#define max(a,b) a>b?a:b
#define mul(a,b) a*b
int main(){
int x=4.y=3;
int max=max(x,y+2);
int product=mul(x,y+2);
cout得到的結果並不是想象中的9,20;而是9,14.
解決巨集定義的展開錯誤的方法是:
1.在巨集定義中,將引數加上括號,這樣在替換時保證括號內的表示式優先運算;
2.利用括號將整個巨集定義的內容括起來,保證整個巨集定義中的表示式優先運算。
一 巨集定義(3) 檢視巨集展開
從乙個巨集定義開始說起 define mul a,b a b 乍看之下這個巨集定義並沒有什麼問題,但是當你採用如下用法的時候就會出現問題了 int main char argv intargc 執行後輸出 可以看到結果並不是我們預期的 5 9 45,這個時候我們可能就會想到怎麼去檢視巨集展開後是變成...
巨集定義中 和 符號的使用和巨集定義展開問題
程式如下 include define f a,b a b define g a a define h a g a intmain 答案 第一行 12 第二行 f 1,2 說明 1 關於符號 和 兩個符號都只能用於預處理巨集擴充套件。不能在普通的原始碼中使用它們,只能在巨集定義中使用。簡單的說,是把...
abs int 巨集定義 巨集定義和巨集方法
巨集定義和巨集方法 定義機型 define is iphone5 uiscreen instancesrespondtoselector selector currentmode cgsizeequaltosize cgsizemake 640,1136 uiscreen mainscreen cu...