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)
¿Fue útil?

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
scroll top