第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

C中宏中括號的必要性

C中宏中括號的必要性

C C++
牧羊人nacy 2019-06-15 10:48:52
C中宏中括號的必要性我嘗試使用宏的定義。SQR在以下代碼中:#define SQR(x) (x*x)int main(){     int a, b=3;     a = SQR(b+5);      // Ideally should be replaced with (3+5*5+3), though not sure.     printf("%d\n",a);     return 0;}印出來23..如果我將宏定義更改為SQR(x) ((x)*(x))那么輸出就和預(yù)期的一樣,64..我知道調(diào)用C中的宏將調(diào)用替換為宏的定義,但我仍然不明白它是如何計(jì)算的23.
查看完整描述

3 回答

?
鴻蒙傳說

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

預(yù)處理宏在編譯代碼之前執(zhí)行文本替換,如下所示SQR(b+5)翻譯為(b+5*b+5)=(6b+5)=6*3+5=23

正則函數(shù)調(diào)用在將參數(shù)(b+3)傳遞給函數(shù)之前會計(jì)算它的值,但是由于宏是預(yù)編譯的替換,操作的代數(shù)順序變得非常重要。


查看完整回答
反對 回復(fù) 2019-06-15
?
GCT1015

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊

因?yàn)?/trans>(3+5*3+5 == 23).

鑒于((3+5)*(3+5)) == 64.

最好的方法是不使用宏:

inline int SQR(int x) { return x*x; }

或者簡單地寫x*x.


查看完整回答
反對 回復(fù) 2019-06-15
?
慕的地10843

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊

考慮使用此宏替換宏:

#define SQR(x) (x*x)

使用b+5作為爭論。你自己做替補(bǔ)吧。在你的代碼中,SQR(b+5)將成為:(b+5*b+5),或(3+5*3+5)..現(xiàn)在記住你的運(yùn)算符優(yōu)先規(guī)則:*以前+..因此,評估如下:(3+15+5),或23.

宏的第二個(gè)版本:

#define SQR(x) ((x) * (x))

是正確的,因?yàn)槟褂眠@些父函數(shù)來使宏參數(shù)不受運(yùn)算符優(yōu)先級的影響。

本頁解釋操作符偏好C有一個(gè)很好的圖表。這是C11參考文件的相關(guān)章節(jié)。

這里要記住的是,您應(yīng)該養(yǎng)成習(xí)慣,始終使用Parens來屏蔽宏中的任何參數(shù)。


查看完整回答
反對 回復(fù) 2019-06-15
  • 3 回答
  • 0 關(guān)注
  • 547 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號