Quelle est l'utilisation de do {} while (0)? [dupliquer]
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)
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