Duplicar posible:
Do-While and if-else statements in C/C++ macros¿De qué sirve hacer mientras (0) cuando definimos una macro?
estoy leyendo el núcleo de Linux y me encontré con muchos macros como este:
#define INIT_LIST_HEAD(ptr) do { \
(ptr)->next = (ptr); (ptr)->prev = (ptr); \
} while (0)
¿Por qué usan esto en lugar de definir simplemente en un {}?
Pero la pregunta del OP se encuentra. ¿Por qué no simplemente {(ptr) -> next ...} en lugar de do {(ptr) -> next ...} while (0) ;? –
arno explicó eso. Se expandiría a "{(ptr) -> next ...};" por lo tanto, una declaración seguida de una segunda declaración. Sin embargo, la sintaxis es "if (expression) statement else statement". El resto no estaría asociado con ningún if, ya que habría escrito "if (expression) statement statement" (uno "{...}" y un ";" statement). –
Como dijo Amo, es un truco ingenioso que permite que una macro * sea * una declaración en C que debe terminar con un punto y coma. Hace que la macro actúe exactamente como una llamada a función, en lo que concierne a la construcción y terminación de sentencias (con ';'). – Eddie