[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的直接写个单纯语句而已,主要你的宏在展开时候还保留你原先定于该宏的含义就可以了

慕桂英546537
TA贡献1848条经验 获得超10个赞
应该是为了避免忘掉写分号(语句结束符)导致的错误。比如:if(c1)FREEP(p);? ?? ?? ? //如果这个分束忘掉了,不能编译过去else//do something另外,这种写法,编译器生成的代码和do语句块里的代码应该是一样的,不会有效率上的损失。
- 2 回答
- 0 关注
- 160 浏览
添加回答
举报
0/150
提交
取消