我踩中了 MACRO 的 Pitfall

      虽然自己的 Blog 中有一篇关于“宏陷阱”的文章,可是在最近的工作中自己却没有意识到这个常规的宏“陷阱”,自己中招了。

      hr = HRESULT_FROM_WIN32(foo())  就是这条语句给我们铺设了陷阱

这个宏的定义:

    ((HRESULT)(x) <= 0 ? ((HRESULT)(x))   : ((HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)))

在这里 foo())  被替换两次,从而就被调用两次导致了错误。这正是常规的 :Duplication of Side Effects 陷阱。

 

这个问题是被别人发现的,然后反馈到我们这里。而之前我们还一直以为是别人的错误,现在感觉真是不应该发生这种错误,真的没面子。以后真的要小心啊!提醒大家用宏的时候一定要小心!以免中招。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值