Re: how to make a macro work as a single line if stmt without braces

Liste des GroupesRevenir à cl c  
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.c
Date : 21. Sep 2024, 11: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.

Date Sujet#  Auteur
21 Sep09:35 * how to make a macro work as a single line if stmt without braces6Mark Summerfield
21 Sep10:10 +- Re: how to make a macro work as a single line if stmt without braces1Lawrence D'Oliveiro
21 Sep10:47 +- Re: how to make a macro work as a single line if stmt without braces1David Brown
21 Sep11:13 +* Re: how to make a macro work as a single line if stmt without braces2Bart
21 Sep11:53 i`- Re: how to make a macro work as a single line if stmt without braces1Mark Summerfield
21 Sep11:15 `- Re: how to make a macro work as a single line if stmt without braces1Ike Naar

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal