Frank Mehnert wrote:
Hi,
I'm searching for a replacement of
do {} while (0)
in a macro definition.
My problem is the following:
#define BREAK_ON_ERROR(i) \
if (1) \
{ \
if (i < 0) \
break; \
} \
else do \
{ \
} while (0) \
int foo(void)
{
for (;;)
{
int bar = 1, buzz = 2;
if (bar)
BREAK_ON_ERROR(buzz);
}
}
gcc-4.3 will warn with
'warning: suggest explicit braces to avoid ambiguous `else'
Any hints for a clever replacement of 'do {} while (0)' in this
case? Of course, enclosing the BREAK_ON_ERROR statement like
if (bar)
{
BREAK_ON_ERROR(buzz)
}
is possible but not what I want :-)
Well, it's ugly, but what about just making the semicolon illegal, i.e.:
#define BREAK_ON_ERROR(i) { if (i < 0) break; }
...or you could do something ending with "(void)0", but then this would
not work:
if (bar)
BREAK_ON_ERROR(buzz)
else
...
...unless you add braces :-(.
--
Matthew
Please do not quote my e-mail address unobfuscated in message bodies.
--
Sorry, not a winner. Please try again.