duplicados posibles:
What’s the use of do while(0) when we define a macro?
Why are there sometimes meaningless do/while and if/else statements in C/C++ macros?
C multi-line macro: do/while(0) vs scope block¿Qué significa "hacer {...} mientras (0)" hacer exactamente en el código kernel?
que he visto una gran cantidad de usos de este tipo, previamente pensé que el programador querían salir de un bloque de codificar fácilmente ¿Por qué necesitamos un bucle do {...} mientras (0) aquí? ¿Estamos tratando de decirle algo al compilador?
Por ejemplo, en el kernel de Linux 2.6.25, include/asm-IA64/system.h
/*
* - clearing psr.i is implicitly serialized (visible by next insn)
* - setting psr.i requires data serialization
* - we need a stop-bit before reading PSR because we sometimes
* write a floating-point register right before reading the PSR
* and that writes to PSR.mfl
*/
#define __local_irq_save(x) \
do { \
ia64_stop(); \
(x) = ia64_getreg(_IA64_REG_PSR); \
ia64_stop(); \
ia64_rsm(IA64_PSR_I); \
} while (0)
Creo que tienes razón. Eso 'crea el bloque del que puedes salir. También crea otro marco en la pila, pero en la mayoría de los casos se optimizará. Para obtener más pistas, eche un vistazo a las definiciones de ia64_ *. Podrían ser macros que tienen declaraciones de interrupción o algún otro tipo de burla. – Vlad
http://stackoverflow.com/questions/1067226/c-multi-line-macro-do-while0-vs-scope-block –
Puede hacer todas o ninguna –