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

2021-08-29 22:52:24 字數 957 閱讀 8866

當定義「常數巨集」的時候區別不大,如

#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更符合我們的閱讀習慣。

部分原文: 

JS 中函式名後面加與不加括號的區別

例如 1 a.onmouseover fn1 2 a.onmouseout fn2 3 function fn1 6 function fn2 只要呼叫函式進行執行,都必須加括號。函式是乙個物件,函式名是指向這個物件的指標。函式名後面加上括號就表示立即呼叫執行這個函式裡面的 使用不帶圓括號的函式是訪...

case語句中定義變數要加括號

map iterator it map iterator itid recv acceptsocket,char recvbuf,sizeof recvbuf 0 switch recvbuf.protocol if it m muserpassword.end break case load it...

JS中函式名後面的括號加與不加的區別和作用?

function fun var a fun var b fun js中我們把以上 加粗的部分叫做函式,函式是一種叫做function引用型別的例項,因此函式是乙個物件。物件是儲存在記憶體中的,函式名則是指向這個物件的指標。var a fun 表示把函式名fun這個指標拷貝乙份給變數a,但是這不是指...