C makro wieloliniowe: do / while (0) vs blok zakresu [duplikat]

Możliwe duplikaty:
Jaki jest pożytek z funkcji while, gdy definiujemy makro?
Dlaczego czasami nie ma żadnych instrukcji do / while i if / else w makrach C / C ++?
rób {…} a (0), do czego to jest dobre?

Widziałem kilka wieloliniowych makr C, które są zapakowane w pętlę do / while (0), jak:

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

Jakie są korzyści (jeśli występują) zapisania kodu w ten sposób w przeciwieństwie do korzystania z podstawowego bloku:

#define FOO \
  { \
    do_stuff_here \
    do_more_stuff \
  }

questionAnswers(1)

yourAnswerToTheQuestion