我正在完成学业任务。在调试模式期间,我想打开我的控制台模式,在发布期间关闭控制台。
我已经按照stackoverflow中的建议尝试了marco,但它无效。我正在使用visual studio 2012(空项目c ++)
#if DEBUG
//doing something
#else
//Release mode doing something
#endif
答案 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