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 : bc (at) *nospam* freeuk.com (Bart)
Groupes : comp.lang.c
Date : 21. Sep 2024, 11:13:00
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vcm2mr$1humj$1@dont-email.me>
References : 1
User-Agent : Mozilla Thunderbird
On 21/09/2024 08:35, Mark Summerfield wrote:
I have this macro:
 #define WARN(...)                                       \
     do {                                                \
         fprintf(stderr, "%s#%d: ", __FILE__, __LINE__); \
         fprintf(stderr, __VA_ARGS__);                   \
     } while (0);
 which I use like this:
 total++;
if (failed) {
     WARN("failed because...");
} else
     ok++;
 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'
Remove the semicolon at the end of the macro.
As it is, it compiles to:
  if (failed) do {...} while 0;; else ok++:
There are two semicolons together, the second terminates the whole if statement, leaving an open 'else'.

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