Il semble que ce que vous voulez faire puisse être réalisé de cette manière, sans rencontrer de problèmes :
#ifdef DEBUG
# define DO(WHAT) MyObj->WHAT()
#else
# define DO(WHAT) while(false)
#endif
Btw, mieux vaut utiliser le NDEBUG
macro, sauf si vous avez une raison plus spécifique de ne pas le faire. NDEBUG
est plus largement utilisé comme une macro qui signifie "pas de débogage". Par exemple, la norme assert
peut être désactivée en définissant NDEBUG
. Votre code deviendrait :
#ifndef NDEBUG
# define DO(WHAT) MyObj->WHAT()
#else
# define DO(WHAT) while(false)
#endif