为了账号安全,请及时绑定邮箱和手机立即绑定

下面的两个宏应定义应该如何理解?

下面的两个宏应定义应该如何理解?

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 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号