Возможные дубликаты:
Что нужно использовать во время (0), когда мы определяем макрос?
Почему иногда существуют бессмысленные операторы do/while и if/else в макросах C/С++?
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 \
  }
