do while(false)实用技巧

Posted chenhuan001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了do while(false)实用技巧相关的知识,希望对你有一定的参考价值。

今天看项目源码的时候发现有些地方用了do{} while(false)的用法,查了下发现这样确实有些优点,mark下。

1.最重要的优点,用在略微复杂的宏定义中。

#define AB1    a; b;     // x, 下面语句b不能被执行: if (cond) AB1;  
#define AB2    { a; b; } // x, 下面语句编译出错:if (cond) AB2; else ...;  
#define AB3    a, b      // x, 有运算符优先级问题  
#define AB4    do { a; b; } while (0)  

 

2.当你执行一段代码到一半,想跳过剩下的一半的时候,如果你正处于do while循环中,则能用break达到这个目的。如下伪代码:

int foo()
{
    somestruct *ptr = malloc(...);

    dosomething...;
    if(error)
        goto END;
    dosomething...;
    if(error)
        goto END;
    dosomething...;
END:
    free(ptr);
    return 0;
}

避免goto语句的话,实用do while(false)就能很好的解决。

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

    free(ptr);
    return 0;
}

以上是关于do while(false)实用技巧的主要内容,如果未能解决你的问题,请参考以下文章

do{}while(false)妙用

php学习笔记-do while循环

do-while 和 while 比较

JS中 do while循环问题

如何在 do while(false) 中禁用 C4127 [重复]

基础循环以及循环控制语句