Подтвердить что ты не робот

С++ определяет, компилируется ли с помощью отладочных символов без указания символа препроцессора

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

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

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

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

4b9b3361

Ответ 2

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

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

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

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