do{ ...}while(0)応用テクニック


  • は、複雑なマクロ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();これは私たちが望んでいるものではありません.2番目のb()のためです.実行されません.
  •   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; }
  •        waring
    #define B  do{   } while(0);