Macro multilínea C: hacer / while (0) vs bloque de alcance [duplicado]

Posibles duplicados:
¿De qué sirve hacer while (0) cuando definimos una macro?
¿Por qué a veces hay sentencias do / while y if / else en las macros C / C ++ sin sentido?
do {…} while (0) ¿para qué sirve?

He visto algunas macros C de varias líneas que están envueltas dentro de un bucle do / while (0) como:

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

¿Cuáles son los beneficios (si los hay) de escribir el código de esa manera en lugar de usar un bloque básico?

#define FOO \
  { \
    do_stuff_here \
    do_more_stuff \
  }

Respuestas a la pregunta(1)

Su respuesta a la pregunta