2011-12-14 5 views
2

J'ai le code exemple suivant dans un de mes fichiers d'en-tête:Quand et où est défini _DEBUG?

#ifdef _DEBUG 
#define _DEBUG_NEW_REDEFINE_NEW 0 
#include "debug_new.h" 
#else 
#define DEBUG_NEW new 
#endif 

L'application qui comprend ce fichier d'en-tête est compilé en utilisant le compilateur gcc avec l'option -DDEBUG.

Question:

est-_DEBUG est défini en raison de l'option -DDEBUG?

Répondre

3

-DDEBUG ne définira que DEBUG, pas _DEBUG. Pour comprendre pourquoi (ou si) _DEBUG obtient défini, essayer de construire le fichier source qui comprend cet en-tête avec

gcc --other_options source_file.cc -E -dD -o source_file.ii 

(Vous devrez peut-être supprimer un autre drapeau -o dans la ligne de commande.) Puis source_file. ii inclura des lignes #define pour chaque macro qui a été définie, et # <lineno> <header> lignes chaque fois qu'il change les fichiers d'en-tête. Vous pouvez lire http://gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc/Preprocessor-Options.html#index-dD-946 pour voir exactement ce que -dD fait.