Я делаю свое школьное задание. В режиме отладки я хотел бы включить режим консоли, а во время выпуска отключить консоль.
Я попытался Марко, как рекомендуется в stackoverflow, но он не работает. Я использую Visual Studio 2012 (пустой проект C ++)
#if DEBUG
//doing something
#else
//Release mode doing something
#endif
#if DEBUG
будет работать только если вы определите DEBUG
через параметры компилятора.
По умолчанию, DEBUG
не определено, но _DEBUG
является. Пытаться #if defined(_DEBUG)
или измените параметры компилятора (через Свойства проекта / Свойства конфигурации / C / C ++ / Препроцессор / Определения препроцессора), чтобы определить DEBUG
,
#if DEBUG
разрешится во время компиляции, а не во время выполнения.
NDEBUG
довольно стандартный макрос, определенный в режиме релиза.
И я думаю, что Visual Studio определяет _DEBUG
макрос в режиме отладки.
В любом случае вы можете определить свои собственные макросы в Visual Studio
Идти к Project->Properties->Configuration Properties->C/C++->Preprocessor -> Preprocessor Definitions
Там вы можете добавить макросы для вашего проекта в выбранной вами конфигурации сборки.
Из ваших комментариев кажется, что 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()
звоните, чтобы избежать проблем с буферизацией.
Для C # константы DEBUG работают нормально, просто убедитесь, что в свойствах проекта она включена.
Перейдите в свойства проекта (щелкнув правой кнопкой мыши по проекту в обозревателе решений), затем выберите опцию сборки в правой части окна и установите флажок определения константы DEBUG.
Тогда вы можете использовать такой код.
#if DEBUG
// debug mode
#else
//release mode
#endif