do while 的两个小技巧

 do {
...
}
while (0); // while (false)
的一点有用的小技巧:

1. 在宏里用:
看下面情况:
#define swap(x,y) { int tmp = x; x = y; y = tmp; }
使用时如果这样写:
if (condition) swap(a, b); else {...}
将被替换成:if (condition) {int tmp = x; x = y; y = tmp; } ; else { ... }
这样就会产生编译错误(if字句里的花括号后面多了分号)。避免出现这样问题的方法:
#define swap(x,y) do { int tmp = x; x = y; y = tmp; } while (0)

2. 替代goto语句:
goto语句破坏了程序的结构化,但是适当的使用恰到好处的goto语句有时非常有用,能少打很多代码,如:
int *p = new int;
...
if (condition1) {
    delete p;      // 冗余代码
    return NULL;
}
else if (condition2) {
    delete p;      // 冗余代码
    return NULL;
}
else if ...
...

return p;
这样,用goto 语句就能减少冗余的代码:
if (condition1) goto FAILURE ;
else if (condition2) goto FAILURE ;
else if ...
...
return p;
FAILURE:
delete p;
return NULL;

do ... while 也可以达到同样效果,并且结构上更好:
int *p = new int;
...
do {
    if (condition1) break ;
    else if (condition2) break ;
    else if ...
    ...
    return p;

} while (0);
delete p;
return NULL;

转自: http://blog.csdn.net/xuxinshao/article/details/4818117
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值