巨集引數加括號的原因

2021-06-17 16:14:57 字數 354 閱讀 2887

加括號是為了處理表示式引數(即巨集的引數可能是個演算法表示式)時不出錯,因為巨集替換就是文字替換,所以如果有以下情況:

#define com(a,b) (a)*(b)

那麼com(6+5,3)這個呼叫會怎麼替換呢?它會換成這樣:

(6+5)*(3)

顯然這是和com巨集的意圖一致的,但是如是去掉了定義中括號,即寫成這樣:

#define com(a,b) a*b

那麼com(6+5,3)這個呼叫會怎麼替換呢?它就會換成這樣:

6+5*3

這樣顯然就和巨集的意圖不符合了。

但是你所寫出的程式中的引數(即*p++和b)呼叫原程式的巨集,這兩種情況沒區別.加括號是為了更通用。 

點滴 巨集 引數加括號

define count x,y a b define count x,y a b 這兩者在 x 3 4 因為巨集替換其實就是文字的直接替換。least min p b 有問說這種會產生什麼區別?p b p b如果這兩者會有區別的話,是不是因為 和 的優先順序的問題?查了一下,果然是,這種題雖然說程...

帶引數 巨集 使用括號將引數擴起來

define sq y y y main 上例中第一行為巨集定義,形參為y。程式第七行巨集呼叫中實參為a 1,是乙個表示式,在巨集展開時,用a 1代換y,再用 y y 代換sq,得到如下語句 sq a 1 a 1 這與函式的呼叫是不同的,函式呼叫時要把實參表示式的值求出來再賦予形參。而巨集代換中對實...

new 物件加括號和不加括號的區別

在new物件的時候有加上 有不加 不知道這個到底是什麼區別?比如 cbase base new cderived cbase base new cdeviced 很多人都說,加括號呼叫沒有引數的建構函式,不加括號呼叫預設建構函式或唯一的建構函式。這是有問題的。對於自定義類型別 如果該類沒有定義建構函...