1. 辅助定义复杂的宏

    example:  #define A(args)   do { a(args); b() } while(0);

    如果定义#define A(args)   a(args);b();

    if(i > 0)   A(i) 

    if(i > 0  )

    do { a(2);b();} while(0)  

    或者

    while(1)

    a(args);b();  这不是我们想要的,因为第二个b();不会被执行。


  2. 代替goto语句,代码流程比较好。int foo(){ 
        somestruct* ptr = malloc(...);   
        do{
            dosomething...;
            if(error)
            {
                break;
            } 
            dosomething...;
            if(error)
            {
                break; //goto free(ptr);
            }
            dosomething...;
        }while(0);
        free(ptr);
        return 0; }
  3. 避免空宏引起的waring

    #define B  do{   } while(0);