отладка — время выполнения, как определить режим отладки или выпуска в визуальной студии Stack Overflow

Я делаю свое школьное задание. В режиме отладки я хотел бы включить режим консоли, а во время выпуска отключить консоль.

Я попытался Марко, как рекомендуется в stackoverflow, но он не работает. Я использую Visual Studio 2012 (пустой проект C ++)

#if DEBUG
//doing something
#else
//Release mode doing something
#endif

3

Решение

#if DEBUG будет работать только если вы определите DEBUG через параметры компилятора.

По умолчанию, DEBUG не определено, но _DEBUG является. Пытаться #if defined(_DEBUG)или измените параметры компилятора (через Свойства проекта / Свойства конфигурации / C / C ++ / Препроцессор / Определения препроцессора), чтобы определить DEBUG,

9

Другие решения

#if DEBUG разрешится во время компиляции, а не во время выполнения.

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

В любом случае вы можете определить свои собственные макросы в Visual Studio

Идти к Project->Properties->Configuration Properties->C/C++->Preprocessor -> Preprocessor Definitions Там вы можете добавить макросы для вашего проекта в выбранной вами конфигурации сборки.

0

Из ваших комментариев кажется, что tproblem, с которым вы сталкиваетесь, открывает окно консоли и подключается к stdout (имеющий мало общего со сборками DEBUG vs. RELEASE).

Смотрите статью поддержки MS ИНФОРМАЦИЯ: Вызов процедур вывода CRT из приложения с графическим интерфейсом для рабочего примера того, как заставить программу с графическим интерфейсом открыть консоль и прямой stdout к нему:

#include <stdio.h>
#include <io.h>
#include <fcntl.h>

// ...

int hCrt;
FILE *hf;

AllocConsole();
hCrt = _open_osfhandle(
(long) GetStdHandle(STD_OUTPUT_HANDLE),
_O_TEXT
);
hf = _fdopen( hCrt, "w" );
*stdout = *hf;
int i = setvbuf( stdout, NULL, _IONBF, 0 );
puts("hello world");

На самом деле, при дальнейшем тестировании, ваша более простая техника использования freopen("CONOUT$","w",stdout); тоже работает По некоторым причинам в моих начальных тестах это не сработало. Вам также может понадобиться setvbuf() звоните, чтобы избежать проблем с буферизацией.

0

Для C # константы DEBUG работают нормально, просто убедитесь, что в свойствах проекта она включена.

Перейдите в свойства проекта (щелкнув правой кнопкой мыши по проекту в обозревателе решений), затем выберите опцию сборки в правой части окна и установите флажок определения константы DEBUG.

Тогда вы можете использовать такой код.

#if DEBUG

// debug mode

#else

//release mode

#endif
-1
По вопросам рекламы [email protected]