Автоматические #defines в соответствии с конфигурацией Debug / Release в Visual Studio

У меня есть отладочная информация в моей программе:

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

а DEBUG определяется в моей программе вручную. Я всегда комментирую строчку, когда делаю релизную версию. В Visual Studio также есть конфигурации для версий Debug и Release, которые обрабатывают командную строку и т. Д., Используемую для компиляции. Могу ли я также использовать конфигурацию «Отладка» для автоматического определения DEBUG компилятору? Как?


person Felix Dombek    schedule 05.01.2011    source источник


Ответы (4)


Visual Studio автоматически определяет символ _DEBUG для сборок отладки (и NDEBUG для сборок без отладки).

Другой способ сделать это - перейти в настройки проекта -> свойства конфигурации -> C / C ++ -> препроцессор и вручную отредактировать определения препроцессора.

См. Также:
В этом ответе более подробно объясняются различия между _DEBUG и NDEBUG.
Этот ответ объясняет назначение символа NDEBUG и то, определен ли он стандартом.

person Jan Holecek    schedule 05.01.2011
comment
Кстати, NDEBUG - портативное решение. Очень жаль, что для сборок DEBUG не существует стандартного символа. - person edA-qa mort-ora-y; 05.01.2011
comment
Привет, как вы можете быть уверены, что vs определяет эти макросы? на msdn просто упоминается _DEBUG, а не NDEBUG, где я могу увидеть список всех макросов, которые VS делает для вас, пожалуйста? - person Icebone1000; 10.07.2013
comment
@ Icebone1000: Я добавил ссылку на ответ, объясняющую, является ли NDEBUG стандартным символом и почему его следует считать переносимым. См. список предопределенных макросов в VS. - person Jan Holecek; 17.07.2013
comment
Обратите внимание, что если вы редактируете определения вручную, вам может потребоваться перезапустить VS, прежде чем они будут распознаны. - person RoG; 13.07.2017

Используйте 1_. Visual C ++ определяет это для конфигурации отладки. Ознакомьтесь с директивами препроцессора для настройки отладки в диалоговом окне свойств вашего проекта.

person Moo-Juice    schedule 05.01.2011

Я тоже думал, что мне просто нужно посмотреть свойство препроцессора и удалить _DEBUG. Visual Studio пытается помочь, установив _DEBUG, если вы выберете одну из опций библиотеки времени выполнения отладки.

На странице свойств проекта Configuration Properties \ C / C ++ \ Code Generation параметр, выбранный для Runtime Library, влияет на несколько определений. При выборе библиотеки отладки (/ MTd или / MDd) _DEBUG определяет is установить.

См. MSDN / MD, / MT ... для получения дополнительной информации о переключатели. На основе этих параметров устанавливается несколько #defines. Они довольно незаметны при попытке определить, кто устанавливает #define, даже до того, как вы включите какие-либо файлы заголовков !!

person Quijote    schedule 13.12.2013

Да, вам следует проверить страницу параметров проекта, Компиляция-> Дополнительные параметры компиляции. Однако VS по умолчанию автоматически определяет директиву DEBUG для режима отладки.

person Nickolay Olshevsky    schedule 05.01.2011
comment
Я считаю, что это директива _DEBUG. Обратите внимание на подчеркивание. - person notbad.jpeg; 12.08.2014