Question

Possible en double: Pourquoi y at-il parfois sens do / while et if / else en C / C ++ macros?
Quelle est l'utilisation de do while (0) lorsque nous définissons une macro?
comment ne pas {} while (0) travail macro

Je me demande ce que le do{ ... } while(0) d'utilisation (... comme lieu porte pour tout autre code) est, comme il le ferait, pour autant que je sache, être exactement la même chose que juste en utilisant ....

Vous pouvez trouver le code comme celui-ci dans la langue officielle CPython source . À titre d'exemple, 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)
Était-ce utile?

La solution

Il est compilateur exiger ; donc l'aspect macro comme un appel de fonction:

Py_DECREF(x); // ok
Py_DECREF(x) // error
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top