當定義“常數宏”的時候區別不大,如
#define MAX_NUM x //x爲參數
#define MAX_NUM ( x ) //宏的參數可以用圓括號括起來,此時帶參數的宏外形與函數非常相似
但當定義是“類函數宏”時,如
#define A(x) x+x
#define B(x) (x+x)
printf("%d\n",A(x)*A(x) ); //35
printf("%d\n",B(x)*B(x) ); //100
就必須加括號
(1)加括號的情況
在編寫一個簡單的MAX宏時,我們需要加上足夠括號才能保證結果儘可能的正確。
#define MIN(X,Y) ((X)>(Y)?(X):(Y))
在宏定義中最好全部使用大寫字母,以區別正規的代碼。
(2)不加括號的情況
用預處理指令#define聲明一個常數,用以表明1年中有多少秒。
#define SECONDS_PER_YEAR (60*60*24*365)UL
單純這一條宏定義是沒有什麼錯誤的,但如果替換到源代碼中就會出現語法錯誤(不應該加括號)。
在整數值後面添加L或者l(小寫的L,爲了避免視覺錯誤最好使用L),表示此整數爲long整型。
在整數值後面添加U或者u,表示此整數爲unsigned整型。
如果各添加一個,也就是都在整數值直接加上後面加上U和L,那就表示unsigned long int型。
數值後面直接加U或者L才行,前邊加上括號就不行了。
正確的寫法應該是:
#define SECONDS_PER_YEAR 60*60*24*365UL
或者
#define SECONDS_PER_YEAR 60*60*24*365LU
L和U不分前後,但從可讀性的角度來講在數值後面加UL更符合我們的閱讀習慣。
部分原文:https://blog.csdn.net/niu91/article/details/17894379