do {} while(0)的妙用

来源:互联网 发布:jc是什么意思网络用语 编辑:程序博客网 时间:2024/04/30 14:55

do {} while(0)在linux是一种很常见的用法。

用法1:

     在判断语句中使用,避免混淆语句结构。

    用do{}while(0)将语句包起来,避免干扰原有语句的结构。

   例:

       #define foo(a)/

               do{

                      if(a == 0)dosomething();

               }while(0);

 

       if(x == 1)

              foo(a);

       else something();

    如果不包起来,编译器将会按

        if(x == 1)

              if(a==0)dosomething();

              else something();

    解释,程序流程将会被 改变。

用法2:

      避免使用goto语句

     例:

     int foo(){

            //申请资源

            int * p = malloc(sizeof(int));

            do{

                   //出错,break;

             }while(0);

 

            //出错处理

            free(p);

            return -1;

     }

 

      如果不用do{}while(0)的话,程序将需要在每一个退出分支上编写同样的出错处理函数或采用goto语句跳转到出错处理分支中,程序的可读性下降,结构混乱。

 

用法3:

        #define foo() { int x; x++; x++;}

        if(a == 0)foo();

        else dosomething();

        以上代码存在语法错误,用do{}while(0)可以消除。

总结,do{}while(0)在宏定义中有广泛的应用,使用它可以产生通用性更强的宏定义,提高宏定义的适用性。在程序中使用可以消除goto语句,提供更清晰的代码结构。