Qual è l'uso di do {} while (0)? [duplicare]
Domanda
Eventuali duplicati:
Perché a volte ci sono senza senso do / while e if / else in C / C ++ macro?
Qual è l'uso di do while (0) quando si definisce una macro?
come fa fare {} while (0) lavoro nella macro?
Mi chiedo che cosa l'uso do{ ... } while(0)
(...
come segnaposto per altro codice) è, come sarebbe, per quanto ne so, essere esattamente lo stesso che usando solo ...
.
È possibile trovare il codice come questo nella Gazzetta CPython fonte. A titolo di esempio, la macro Py_DECREF
:
#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)
Soluzione
It makes compiler require ;
so the macro looks like a function call:
Py_DECREF(x); // ok
Py_DECREF(x) // error
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow