sirven - que es una macro en excel
¿De qué sirve hacer mientras(0) cuando definimos una macro? (2)
Le permite agrupar varias declaraciones en una macro.
Supongamos que hizo algo como:
if (foo)
INIT_LIST_HEAD(bar);
Si la macro se definió sin el encapsulado do {...} while (0) ;, el código anterior se expandiría a
if (foo)
(bar)->next = (bar);
(bar)->prev = (bar);
Claramente, esto no es lo que se pretendía, ya que solo la primera declaración se ejecutará si se cumple. La segunda declaración se ejecutará independientemente de si foo se mantiene.
Editar: explicación adicional en http://c-faq.com/cpp/multistmt.html y http://developer.apple.com/documentation/DeveloperTools/gcc-4.0.1/cpp/Swallowing-the-Semicolon.html#Swallowing-the-Semicolon
Posible duplicado:
Sentencias Do-While y if-else en macros C / C ++
Estoy leyendo el núcleo de Linux y encontré muchas macros como esta:
#define INIT_LIST_HEAD(ptr) do { /
(ptr)->next = (ptr); (ptr)->prev = (ptr); /
} while (0)
¿Por qué usan esto en lugar de definirlo simplemente en un {}?
Puedes seguirlo con un punto y coma y hacerlo ver y actuar más como una función. También funciona correctamente con las cláusulas if / else.
Sin el tiempo (0), su código anterior no funcionaría con
if (doit)
INIT_LIST_HEAD(x);
else
displayError(x);
ya que el punto y coma después de la macro "comería" la cláusula else, y lo anterior ni siquiera se compilaría.