亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

下面的兩個宏應定義應該如何理解?

下面的兩個宏應定義應該如何理解?

C++
搖曳的薔薇 2022-05-31 19:15:38
[ol][*]#define FREEP(p) do { if (p) free(p); } while (0)[/ol][ol][*]#define DELETEP(p) do { if (p) delete(p); } while (0)[/ol]上面的兩個宏應定義如何理解?while 循環的條件假,在do { } while (循環條件),能保證循環執行一次,但為什么要這樣寫代碼呢?
查看完整描述

2 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

你的疑問應該是這句吧
#define FREEP(p) do { if (p) free(p); } 為什么定義個宏還需要用到個do-while。這個看著好像有點多余,其實這只是一種寫法而已,不需要太糾結,它沒有特殊的意義,具體的意義是要體現在程序的上下文中的.你也可以不加do-while的直接寫個單純語句而已,主要你的宏在展開時候還保留你原先定于該宏的含義就可以了

查看完整回答
反對 回復 2022-06-06
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

應該是為了避免忘掉寫分號(語句結束符)導致的錯誤。比如:if(c1)FREEP(p);? ?? ?? ? //如果這個分束忘掉了,不能編譯過去else//do something另外,這種寫法,編譯器生成的代碼和do語句塊里的代碼應該是一樣的,不會有效率上的損失。

查看完整回答
反對 回復 2022-06-06
  • 2 回答
  • 0 關注
  • 143 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號