两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

  • 歡迎訪問C語言網(wǎng)www.sztianhecheng.cn 比賽欄每月有獎(jiǎng)月賽!舉辦比賽聯(lián)系QQ:2045302297
  • 問題反饋、粉絲交流 QQ群327452739 藍(lán)橋杯訓(xùn)練群:113766799 申請群時(shí)請備注排名里的昵稱
  • C語言研究中心 為您提供有圖、有料、解渴的C語言專題! 歡迎討論!

C語言中的宏陷阱 #define SQU(x) x*x

C語言研究中心 CTO 21193次瀏覽 3個(gè)評論

有同學(xué)寫過或者想寫這樣的宏定義嗎?

求兩個(gè)或幾個(gè)數(shù)的乘積:?? #define SQU(x) x*x

我們正常使用沒有問題:

C語言中的宏陷阱   #define SQU(x) x*x

 

但如果這樣寫呢?

C語言中的宏陷阱   #define SQU(x) x*x

 

 

 

哎呀,竟然不是100了,難道SQU(10)SQU(5+5)不等價(jià)嗎?5+5不是10嗎?

 

的確,這里SQU(10)和SQU(5+5)的確不等價(jià)!

原因在于,宏定義的本質(zhì)是文本替換!所以在預(yù)處理期間SQU(5+5)這段代碼被宏替換為5+5*5+5,結(jié)果因?yàn)槌朔▋?yōu)先級高于加法,變成5+25+5,可想而知!

那么解決這個(gè)問題的辦法,相信大家看完之后心里應(yīng)該有答案了,就是給x加個(gè)小括號,使它變成一個(gè)整體,如下:

C語言中的宏陷阱   #define SQU(x) x*x

 

就可以解決了。

然而,這并不沒有完!

 

與此類似的,當(dāng)我們想算兩個(gè)數(shù)的和的時(shí)候呢?我們繼續(xù)驗(yàn)證:

 

C語言中的宏陷阱   #define SQU(x) x*x

 

正常寫,不會(huì)觸發(fā)陷阱,關(guān)鍵沒錯(cuò)并不代表沒有問題(雖然每個(gè)x都加了小括號!)

大家試試這樣寫:

 

C語言中的宏陷阱   #define SQU(x) x*x

 

艾瑪! 為嘛不是20*20的400呢?

還是遵循宏的本質(zhì),我們展開來看:10+10*10+10=120

又是一個(gè)優(yōu)先級問題,又一個(gè)陷阱,防不勝防呀!

那怎么解決呢?答:干脆一了百了,整體全加括號吧!

這么寫:#define ADD(x) ((x)+(x))

C語言中的宏陷阱   #define SQU(x) x*x

 

怎么樣,這樣寫就沒問題了!你的宏,從此百毒不侵!

 

 

 

有什么學(xué)習(xí)中遇到的問題,請聯(lián)系我們!

 

C語言研究中心(www.sztianhecheng.cn)

C語言網(wǎng)提供「C語言、C++、算法競賽」在線課程,全部由資深研發(fā)工程師或ACM金牌大佬親授課,更科學(xué)、全面的課程體系,以在線視頻+在線評測的學(xué)習(xí)模式學(xué)習(xí),學(xué)練同步,拒絕理論派,真正學(xué)會(huì)編程!還有獎(jiǎng)學(xué)金等增值福利等你!

C語言網(wǎng), 版權(quán)所有丨如未注明 , 均為原創(chuàng)丨本網(wǎng)站采用BY-NC-SA協(xié)議進(jìn)行授權(quán) , 轉(zhuǎn)載請注明C語言中的宏陷阱 #define SQU(x) x*x
喜歡 (125)
[jinyangH@aliyun.com]
分享 (0)
發(fā)表我的評論
取消評論
表情

Hi,您需要填寫昵稱和郵箱!

  • 昵稱 (必填)
  • 郵箱 (必填)
(3)個(gè)小伙伴在吐槽
  1. scheme 的 衛(wèi)生宏沒這個(gè)問題, 而且可以方便的用宏實(shí)現(xiàn) pascal c java等其他語言
    haskell2017-04-30 17:36 回復(fù)
  2. 對新手來說很有幫助哦
    HaHa2017-04-30 20:45 回復(fù)
  3. 這對新手來說是很容易忽略的
    wewe2017-08-08 20:15 回復(fù)