Re: do { ... } while(0) necessity? (was Re: Copyovering on SIG{SEGV,BUS,..})

From: Erwin S. Andreasen (erwin@PIP.DKNET.DK)
Date: 05/03/98


On Sat, 2 May 1998, Chris Jacobson wrote:

> On 5/2/98 12:06 PM, George (greerga@CIRCLEMUD.ORG) stated:
>
> >Just to nitpick, that won't work unless you add {} to the if...else or
> >do{}while(0) to the macro.
>
> Is the `do' and `while(0)' parts really necessary?
>
> There are some sections of my code that I need to embed within a block,
> but aren't part of a control block... I simply use {...} without
> do/while(0)
> Neither of my compilers have complained (with full warnings on)...

If you are sure they will never be part of a control block, no. Otherwise,
what happens is that you want to put a ; after your macro call to make it
look like a normal C function, but with {} around it, putting a ;
afterwards will not work properly.

Try the following example, with and without do .. while(0) around it.


#include <stdio.h>

#define XYZZY { printf ("test.\n"); printf ("Test2\n"); }

int main()
{
        if (1)
                XYZZY;
        else
                printf ("Foo!\n");

        return 0;
}


 =============================================================================
Erwin Andreasen   Herlev, Denmark <erwin@pip.dknet.dk>  UNIX System Programmer
<URL:http://www.abandoned.org/drylock/>     <*>         (not speaking for) DDE
 =============================================================================


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/15/00 PST