我正在做我的学校作业。在调试模式下,我想打开我的控制台模式,并在发布期间关闭控制台。运行时间如何确定Visual Studio中的调试或发布模式C++
我有尝试marco按照推荐在stackoverflow但它不工作。我使用的Visual Studio 2012(空项目C++)
#if DEBUG
//doing something
#else
//Release mode doing something
#endif
我正在做我的学校作业。在调试模式下,我想打开我的控制台模式,并在发布期间关闭控制台。运行时间如何确定Visual Studio中的调试或发布模式C++
我有尝试marco按照推荐在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
。
嗨,我试过定义(_DEBUG),但它仍然无法正常工作。 #if defined(DEBUG)|定义(_DEBUG) – user2306421 2013-04-22 10:19:02
您能否解释一些关于配置属性的细节?我试图让DEBUG不会工作 – user2306421 2013-04-22 10:20:15
我能想到的是DEBUG = 1;在配置属性下。不知道是否正确的做法 – user2306421 2013-04-22 10:26:52
#if DEBUG
将在编译时自行解析,而不是在运行时解析。
NDEBUG
是在发布模式下定义的非常标准的宏。 而我认为Visual Studio在调试模式下定义了_DEBUG
宏。
在任何情况下,你可以在Visual Studio
转到Project->Properties->Configuration Properties->C/C++->Preprocessor -> Preprocessor Definitions
定义自己的宏在那里,你可以在你所选择的构建配置项目中添加宏。
从你的意见看来,你遇到的问题是获得一个控制台窗口打开并连接到stdout
(与DEBUG与RELEASE构建没有多大关系)。
查看MS支持文章INFO: Calling CRT Output Routines from a GUI Application为如何有一个GUI程序打开控制台,并直接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()
以避免缓冲问题。
感谢MichaelBurr告诉我缓冲区问题。 – user2306421 2013-04-23 03:32:29
对于C#常量DEBUG工作正常,只要确保在项目属性中启用。
转到项目属性(通过在解决方案资源管理器中右键单击您的项目),然后选择窗口右侧的构建选项并检查定义的DEBUG常量复选框。
然后你可以使用这样的代码。
#if DEBUG
// debug mode
#else
//release mode
#endif
c#在哪里? – marsh 2016-09-13 17:18:06
它是如何工作的?你是否收到编译时错误?它是否对发布版本或调试版本做同样的事情?什么? – 2013-04-22 08:28:16
不知道为什么。在我的DEBUG里面包含了if(AllocConsole()) freopen(“CONOUT $”,“w”,stdout); – user2306421 2013-04-22 08:30:12
我没有任何编译时错误。我是否必须在可视化项目中设置任何属性? – user2306421 2013-04-22 08:35:30