C многострочный макрос: do / while (0) против блока области видимости [duplicate]

Possible Duplicates:
What’s the use of do while(0) when we define a macro?
Why are there sometimes meaningless do/while and if/else statements in C/C++ macros?
do { … } while (0) what is it good for?

Я видел несколько многострочных макросов C, которые заключены в цикл do / while (0), например:

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

Каковы преимущества (если таковые имеются) написания кода таким способом по сравнению с использованием базового блока:

#define FOO \
  { \
    do_stuff_here \
    do_more_stuff \
  }

Ответы на вопрос(1)

Ваш ответ на вопрос