巨集定義的巨集展開錯誤

2021-08-20 10:17:25 字數 359 閱讀 5751

巨集定義自身的缺陷是指巨集展開錯誤,主要是由於運算子優先順序等原因,使得巨集展開後的語義與餘項發生偏差。

#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...