Forum: Compiler & IDEs do while Frage


von xjn (Gast)


Lesenswert?

Hallo,

ich sehe in Beispielen häufig folgende C-Konstruktion :
1
#define XX \
2
    do { irgendetwas; nochetwas; } while(0)


Ist dies nicht dasselbe wie :
1
#define XX \
2
    { irgendetwas; nochetwas; }


Oder wozu dient das ?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Es handelt sich um einen rein syntaktischen Trick, bei dem der
Inhalt des Makros sich exakt so benimmt wie ein einzelner
Funktionsaufruf.  Insbesondere funktionieren damit solche Dinge
wie:
1
if (condition)
2
  XX;
3
else
4
  YY;

von Sven P. (Gast)


Lesenswert?

Ist mir auch schon aufgefallen, aber zur Frage:
Warum immer noch ein do() oder while() dazu, warum nicht einfach nur 
geschweifte Klammern?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Es gibt syntaktische Kontexte, bei denen die geschweiften Klammern
wohl nicht den passenden Effekt haben.  Genaues fällt mir gerade
nicht ein, müsste ich wühlen danach.

von (prx) A. K. (prx)


Lesenswert?

Beispiel:
  if (...) Macro(); else
Syntax Error:
  if (...) {...}; else
Korrekt:
  if (...) do{...}while(0); else

Sonst müsstest du schreiben
  if (...) Macro() else
und das sieht doch etwas komisch aus.

von xjn (Gast)


Lesenswert?

Aha !

und Danke :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.