[ol][*]#define FREEP(p) do { if (p) free(p); } while (0)[/ol][ol][*]#define DELETEP(p) do { if (p) delete(p); } while (0)[/ol]上面的兩個(gè)宏應(yīng)定義如何理解?while 循環(huán)的條件假,在do { } while (循環(huán)條件),能保證循環(huán)執(zhí)行一次,但為什么要這樣寫代碼呢?
2 回答
暮色呼如
TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
你的疑問(wèn)應(yīng)該是這句吧
#define FREEP(p) do { if (p) free(p); } 為什么定義個(gè)宏還需要用到個(gè)do-while。這個(gè)看著好像有點(diǎn)多余,其實(shí)這只是一種寫法而已,不需要太糾結(jié),它沒有特殊的意義,具體的意義是要體現(xiàn)在程序的上下文中的.你也可以不加do-while的直接寫個(gè)單純語(yǔ)句而已,主要你的宏在展開時(shí)候還保留你原先定于該宏的含義就可以了
慕桂英546537
TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
應(yīng)該是為了避免忘掉寫分號(hào)(語(yǔ)句結(jié)束符)導(dǎo)致的錯(cuò)誤。比如:if(c1)FREEP(p);? ?? ?? ? //如果這個(gè)分束忘掉了,不能編譯過(guò)去else//do something另外,這種寫法,編譯器生成的代碼和do語(yǔ)句塊里的代碼應(yīng)該是一樣的,不會(huì)有效率上的損失。
- 2 回答
- 0 關(guān)注
- 167 瀏覽
添加回答
舉報(bào)
0/150
提交
取消
