运行时如何在visual studio c ++中确定调试或发布模式

时间:2013-04-22 08:26:11

标签: c++ debugging visual-studio-2012 macros release

我正在完成学业任务。在调试模式期间,我想打开我的控制台模式,在发布期间关闭控制台。

我已经按照stackoverflow中的建议尝试了marco,但它无效。我正在使用visual studio 2012(空项目c ++)

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

5 个答案:

答案 0 :(得分:9)

只有通过编译器选项定义#if DEBUG时,

DEBUG才会起作用。

默认情况下,DEBUG未定义,_DEBUG为。{1}}。尝试#if defined(_DEBUG),或更改编译器选项(通过项目属性/配置属性/ C / C ++ /预处理器/预处理器定义)来定义DEBUG

答案 1 :(得分:0)

#if DEBUG将在编译时解决,而不是在运行时。

NDEBUG是在发布模式中定义的非常标准的宏。 我认为Visual Studio在调试模式下定义了_DEBUG宏。

在任何情况下,您都可以在Visual Studio中定义自己的宏

转到Project->Properties->Configuration Properties->C/C++->Preprocessor -> Preprocessor Definitions在那里,您可以在所选的构建配置中为项目添加宏。

答案 2 :(得分:0)

从您的评论中看来,您遇到的问题是打开一个控制台窗口并连接到stdout(与DEBUG vs. RELEASE版本没什么关系)。

有关如何让GUI程序打开控制台并将stdout指向它的工作示例,请参阅MS支持文章INFO: Calling CRT Output Routines from a GUI Application

#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()调用以避免缓冲问题。

答案 3 :(得分:-1)

对于C#,常量DEBUG工作正常,只需确保在项目属性中启用它。

转到项目属性(通过右键单击解决方案资源管理器中的项目),然后选择窗口右侧的构建选项并检查define DEBUG常量复选框。

然后你可以使用这样的代码。

#if DEBUG

// debug mode

#else

//release mode

#endif

答案 4 :(得分:-1)

这是针对Visual Studio 2019的:

page