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)
È stato utile?

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