一、宏定義要加括號的緣由? 例如定義一個宏:函數
<!-- lang: cpp --> #define div(x,y) x*y
由於宏定義在預處理階段是內容嚴格的替換,若是調用div(a+b,y),替換後就成了a+b*y;不是咱們想要的結果(a+b)*y,因此宏的定義,特別是當作函數的宏定義,應該定義爲code
<!-- lang: cpp --> #define div(x,y) (x)*(y)
二、宏定義中的# 、##字符串
#做用是把後面的宏參數轉化爲字符串,如di
<!-- lang: cpp --> #define STR(s) #s printf(STR(neo)); //輸出爲neo;
<!-- lang: cpp --> #define STR(s,s1) #s###s1 printf(STR(neo,hellow)); //輸出爲neohellow;