當定義「常數巨集」的時候區別不大,如
#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,但是這不是指...