¿Cuál es el uso de do {} while (0)? [duplicar
Pregunta
Posible duplicado:
¿Por qué a veces hay indemnizaciones sin sentido y las declaraciones de si/else en macros C/C ++?
¿De qué sirve hacer (0) cuando definimos una macro?
¿Cómo funciona {} while (0) en macro?
Me pregunto cuál es el uso do{ ... } while(0)
(...
Como poseedor del lugar para otro código) es, como lo haría, hasta donde yo sé, ser exactamente lo mismo que simplemente usar ...
.
Puedes encontrar código como este en el oficial Cpython fuente. Como ejemplo, el Py_DECREF
macro:
#define Py_DECREF(op) \
do { \
if (_Py_DEC_REFTOTAL _Py_REF_DEBUG_COMMA \
--((PyObject*)(op))->ob_refcnt != 0) \
_Py_CHECK_REFCNT(op) \
else \
_Py_Dealloc((PyObject *)(op)); \
} while (0)
Solución
Hace que el compilador se requiere ;
Entonces la macro parece una llamada de función:
Py_DECREF(x); // ok
Py_DECREF(x) // error
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow