Возможный дубликат:
Почему иногда существуют бессмысленные операторы do/while и if/else в макросах C/С++?
Почему в макросах требуется do while(false)
?
#define LOG(message, ...) \
do { \
Lock<MutualExclusion> lock (logMutex); \
.... a lot of code ...
} while (false)
Я не думаю, что он служит любой функциональной цели. Я что-то пропускаю?