琐碎c++

首先告明出处:http://www.cnblogs.com/lizhenghn/p/3674430.html

do{…}while(0)的妙用


  的确在工作中我们不常用到这个语法,一般都是for、while,看了这篇博文后还真是大有用处。
首先展示一下场景:

    #define FUN()  food1()food2();

  这句宏定义就是说调用FUN()宏的时候就带哦用后面两个函数,但是当出现如下情况时,就不能按照我们预想的那样去执行了!

if(a > 0)
    FUN();

  因为宏定义就是完全展开所以上面的情况就相当于

if(a > 0)
    food1();
food2();

  这样food2()就一定会被执行,所以不是我们预想的,像这样的情况我门对他用{}、;等方法都不能保证调用的时候会想我们预想的那样执行
然而此时,do···while(0)就展现了他的妙处

#define FUN() \
    do{ \
        food1(); \
        food2(); \
    }while(0) \

  第二种妙用就是do···while(0)配合break;来避免使用goto语句(不要问我为什么要避免goto语法,小心被搞c++的人打死的!),这种就简单多了,直接上两段对比代码(copy原文code)

int foo()
{
    somestruct *ptr = malloc(...);
    dosomething...;
    if(error)
        goto END;
    dosomething...;
END:
    free(ptr);
    return 0;
}
int foo
{
    do{
        somestruct *ptr = malloc(...);
        dosomething...;
        if(error)
            break;
        dosomething...;
    }while(0);
    free(ptr);
    return 0;
}

原文中还有一些其它的功能,但是本感觉不太使用,就不在这里给出了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值