Возможные дубликаты:
Что нужно использовать во время (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 \ }