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)
                printf ("Foo!\n");

        return 0;

Erwin Andreasen   Herlev, Denmark <>  UNIX System Programmer
<URL:>     <*>         (not speaking for) DDE

     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | |

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