Когда и где определяется _DEBUG? - PullRequest
2 голосов
/ 14 декабря 2011

У меня есть следующий пример кода в одном из моих заголовочных файлов:

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

Приложение, которое включает этот заголовочный файл, скомпилировано с использованием компилятора gcc с параметром -DDEBUG.

Вопрос:

Является ли _DEBUG определенным из-за опции -DDEBUG?

1 Ответ

3 голосов
/ 14 декабря 2011

-DDEBUG будет определять только DEBUG, а не _DEBUG.Чтобы выяснить, почему (или если) определяется _DEBUG, попробуйте создать исходный файл, содержащий этот заголовок, с

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

(возможно, вам придется удалить еще один флаг -o в командной строке.) Затем source_file .ii будет включать #define строки для каждого макроса, который был определен, и # <lineno> <header> строки каждый раз, когда он изменяет заголовочные файлы.

Вы можете прочитать http://gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc/Preprocessor-Options.html#index-dD-946чтобы точно увидеть, что делает -dD.

...