#define count(x,y) ((a)*(b))
#define count(x,y) (a*b)
這兩者在
x= 3+4
因為巨集替換其實就是文字的直接替換。
least = min(*p++, b); 有問說這種會產生什麼區別?
(*p++ ) * b
*p++*b
如果這兩者會有區別的話,是不是因為++ 和*的優先順序的問題?
查了一下,果然是,這種題雖然說程式設計中會犯不加括號的錯,但是要這麼詳細的討論起來感覺想吐哈哈
*有兩個含義:
當它作為乘號運算子的時候,它的優先順序是低於++(自增)的。
當它作為指標取值運算子的時候,跟++是同乙個優先順序的,所以得看兩者的位置在**。
巨集引數加括號的原因
加括號是為了處理表示式引數 即巨集的引數可能是個演算法表示式 時不出錯,因為巨集替換就是文字替換,所以如果有以下情況 define com a,b a b 那麼com 6 5,3 這個呼叫會怎麼替換呢?它會換成這樣 6 5 3 顯然這是和com巨集的意圖一致的,但是如是去掉了定義中括號,即寫成這樣 ...
帶引數 巨集 使用括號將引數擴起來
define sq y y y main 上例中第一行為巨集定義,形參為y。程式第七行巨集呼叫中實參為a 1,是乙個表示式,在巨集展開時,用a 1代換y,再用 y y 代換sq,得到如下語句 sq a 1 a 1 這與函式的呼叫是不同的,函式呼叫時要把實參表示式的值求出來再賦予形參。而巨集代換中對實...
巨集定義和括號
為了盡量避免邊際效應,巨集定義時常要注意括號的使用。例如在編寫乙個簡單的min巨集時,我們需要加上足夠括號才能保證結果盡可能的正確。define min x,y x y x y 但有些情況下,加上括號卻是 畫蛇添足 的。例如,用預處理指令 define宣告乙個常數,用以表明1年中有多少秒。defin...