do {...} while (0) (was: Uninitialized static int counters? )
    Michael ODonnell 
    michael.odonnell at comcast.net
       
    Fri Feb  6 16:53:16 EST 2009
    
    
  
> What I see confufsing is:
>    do { ... } while(0);
> What this means is to go through the loop once.  You need a leading
> curly so you can set up counter as a local variable as variable
> names are block scope.  { ...  } would be equivalent to above.
They're definitely not equivalent - that's why you see do-while(0) so
often.  Try this (admittedly stupid) little program to demonstrate:
   #define b0rken(x) {return x;}
   #define works(x)  do {return x;} while(0)
   int main( int argc, char **argv )
   {
       if( argc > 1 )
           b0rken( argc ); /* Try works() here, instead */
       else
           return( 42 );
   }
 
    
    
More information about the gnhlug-discuss
mailing list