www.mikrocontroller.net

Forum: Compiler & IDEs do while Frage


Autor: xjn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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


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


Oder wozu dient das ?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
if (condition)
  XX;
else
  YY;

Autor: Sven P. (haku) Benutzerseite
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: xjn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha !

und Danke :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.