Sujet : Re: how to make a macro work as a single line if stmt without braces
De : ike (at) *nospam* sdf.org (Ike Naar)
Groupes : comp.lang.cDate : 21. Sep 2024, 10:15:40
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <slrnvet3lr.8b8.ike@iceland.freeshell.org>
References : 1
User-Agent : slrn/1.0.3 (Patched for libcanlock3) (NetBSD)
On 2024-09-21, Mark Summerfield <
mark@qtrac.eu> wrote:
I have this macro:
>
#define WARN(...) \
do { \
fprintf(stderr, "%s#%d: ", __FILE__, __LINE__); \
fprintf(stderr, __VA_ARGS__); \
} while (0);
>
[...]
>
I would prefer to be able to write this instead:
>
total++;
if (failed)
WARN("failed because...");
else
ok++;
>
but doing so results in a compiler error:
>
error: 'else' without a previous 'if'
After expansion of the WARN macro there are two semicolons before the 'else'.
The first semicolon is from the
} while (0);
line, the second is from the
WARN("failed because...");
line.
Removing the semicolon from one of these two lines fixes the compiler error.