do{}while(0)

有时会在源码中或在写代码时在宏定义中用到do...while(0).性能

采用这种方式进行宏定义, 主要是为了防止出现如下错误 :优化

do{}while(0)

  1. 空的宏定义避免出现warnning.code

    #define foo() do{}while(0)
  2. 存在一个独立的操做, 能够进行变量定义, 进行比较复杂的实现.编译器

  3. 若果出如今判断语句事后的宏, 这样能够做为一个总体来实现.源码

    #define foo(x)  \
        action1();  \
        action2();

    在如下状况中就会出错 :it

    if (NULL == pointer)
        foo();      //在这种状况下就会出现 action1, action2不会被同时执行的状况。

使用do{}while(0)缘由

以上三种状况都可以用{}, 实现,但为何必定要用do{}while(0).io

好比 :编译

#define switch(x,y) {int tmp; tmp =x; x = y; y = tmp;}
if (x > y)
    switch(x,y);    
else    //出现编译错误,宏引入代码后多一个分号
    otherAction();

将宏用do{}while(0)将宏包裹起来使其成为一个独立的语法单元, 从而不会与上下文发生混淆, 同时大部分编译器可以识别 do{}while(0) 这种无用的循环, 并对其进行优化, 因此使用这种方法不会致使性能的下降.class

本站公众号
   欢迎关注本站公众号,获取更多信息