Возможный дубликат:
Операторы Do-While и if-else в макросах C/С++
Я читаю ядро linux, и я нашел много таких макросов:
#define INIT_LIST_HEAD(ptr) do { \
(ptr)->next = (ptr); (ptr)->prev = (ptr); \
} while (0)
Почему они используют это, а не определяют его просто в {}?