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);