43 votes

Définitions automatiques en fonction de la configuration Debug/Release dans Visual Studio

J'ai une sortie de débogage dans mon programme comme ceci :

#define DEBUG
...
#ifdef DEBUG
    std::cout << "[RE_words] " << m_re << std::endl;
#endif

et DEBUG est défini manuellement dans mon programme. Je commente toujours la ligne lorsque je crée une version release. Dans Visual Studio, il y a aussi des Configurations pour Débogage vs Libération qui gèrent la ligne de commande, etc. utilisée pour la compilation. Puis-je également utiliser la configuration "Debug" pour définir automatiquement DEBUG au compilateur ? Comment ?

91voto

John Holecek Points 472

Visual Studio définit automatiquement le symbole _DEBUG pour les versions Debug (et NDEBUG pour les versions non Debug).

Une autre façon de procéder est d'aller dans les paramètres du projet -> propriétés de configuration -> C/C++ -> préprocesseur, et d'éditer manuellement les définitions du préprocesseur.

Voir aussi
Cette réponse explique plus en détail les différences entre _DEBUG et NDEBUG.
Cette réponse explique la raison d'être du symbole NDEBUG et précise s'il est ou non défini par la norme.

8voto

Moo-Juice Points 22190

Utilisation _DEBUG . Visual C++ définit ceci pour une configuration Debug. Vérifiez les directives du préprocesseur pour la configuration Debug dans la boîte de dialogue des propriétés de votre projet.

4voto

Quijote Points 31

Je pensais moi aussi qu'il suffisait de regarder la propriété du préprocesseur et de supprimer _DEBUG. Visual Studio essaie de vous aider en définissant _DEBUG si vous sélectionnez l'une des options de la bibliothèque d'exécution de débogage.

Sur la page de propriété du projet Propriétés de configuration \C /C++ \Code Génération l'option sélectionnée pour Bibliothèque d'exécution affecte plusieurs définitions. Lors de la sélection d'une bibliothèque de débogage ( /MTd ou /MDd ) le _DEBUG définir est set.

Voir MSDN /MD, /MT ... pour plus d'informations sur les interrupteurs. Plusieurs #définitions sont définies en fonction de ces options. Elles sont assez invisibles lorsqu'on essaie de trouver qui définit une #define avant même d'inclure un fichier d'en-tête !

0voto

Nickolay Olshevsky Points 8155

Oui, vous devriez vérifier la page des options du projet, Compile->Options de compilation avancées. Cependant, VS définit automatiquement par défaut la directive DEBUG pour le mode Debug.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X