Je le divective préprocesseur suivant:#define TRACE (...) ne fonctionne pas en C++
#ifndef NDEBUG
#define TRACE printf
#else
#define TRACE(...)
#endif
et exemple d'utilisation est:
TRACE("TRACE: some parameter = %i\n", param);
En C tout fonctionne parfaitement bien quand je construis à la fois le débogage et publier des versions, mais dans le compilateur C++ émet les éléments suivants:
avertissement: caractère non valide dans le nom du paramètre macro
erreur: liste de paramètres mal ponctuée dans `#define '
et pointe ces avertissement et erreur vers la directive' TRACE (...) '.
Comment écrire ceci en C++ correctement?
Le problème est que le compilateur doit toujours évaluer les arguments. Si elles sont chères, vous voulez les désactiver. Par conséquent, les macros de type TRACE doivent généralement évaluer le code vide en mode de libération. –