#define語句後面加括號VS不加括號

當定義“常數宏”的時候區別不大,如

#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 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章