C ++ определяет, компилируется ли с отладочными символами без определения символа препроцессора - PullRequest
26 голосов
/ 07 марта 2011

Я использовал что-то вроде этого:

int main(int argc, char *argv[])
{

#ifdef DEBUG
    printf("RUNNING DEBUG BUILD");
#else
    printf("Running... this is a release build.");
#endif
...

Однако для этого требуется, чтобы я скомпилировал с -DDEBUG для сборки отладки. Предоставляет ли мне GCC какой-то способ определить, когда я компилирую символы отладки (флаг -g), например, определение собственного макроса препроцессора, который я могу проверить?

Ответы [ 2 ]

23 голосов
/ 07 марта 2011

Ответ - нет.Обычно эти макросы (DEBUG, NDEBUG, _DEBUG) устанавливаются системой IDE / make в зависимости от того, какая конфигурация (отладка / выпуск) у вас активна.Я думаю, что эти ответы могут быть полезны:

C #define макрос для отладочной печати

Откуда обычно приходит -DNDEBUG?

_DEBUG против NDEBUG

0 голосов
/ 03 января 2015

Я думаю, что ответ, который я искал, был, по сути, тем, что Адам разместил в комментарии, а именно:

Работа компилятора не включает в себя предварительную обработку, и фактически компилятор будет подавлять любые переключатели препроцессора, не обработанные препроцессором, которые попадают в код.

Итак, поскольку способ ветвления кода должен использовать препроцессор, это означает, что к моменту, когда компилятор получит любой код, он уже один или другой (отладочный код или код выпуска), поэтому это невозможно для меня, чтобы сделать то, что мой вопрос задает на этом этапе (после препроцессора).

Таким образом, это прямое следствие того, что препроцессор был спроектирован как отдельный процесс подачи кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...