una sirven que paso para macro las hacer ejemplos como c macros linux-kernel

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.