C mehrzeiliges Makro: do / while (0) vs scope block [duplizieren]

Mögliche Duplikate:
Was nützt do while (0), wenn wir ein Makro definieren?
Warum gibt es in C / C ++ - Makros manchmal bedeutungslose do / while- und if / else-Anweisungen?
mache {…} während (0) wofür ist es gut?

Ich habe einige mehrzeilige C-Makros gesehen, die in eine do / while (0) -Schleife eingeschlossen sind:

#define FOO \
  do { \
    do_stuff_here \
    do_more_stuff \
  } while (0)

Was sind die Vorteile (falls vorhanden) des Schreibens des Codes auf diese Weise im Gegensatz zur Verwendung eines Basisblocks:

#define FOO \
  { \
    do_stuff_here \
    do_more_stuff \
  }

Antworten auf die Frage(1)

Ihre Antwort auf die Frage