Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行时如何确定VisualStudioC++中的调试或发布模式_C++_Debugging_Visual Studio 2012_Macros_Release - Fatal编程技术网

运行时如何确定VisualStudioC++中的调试或发布模式

运行时如何确定VisualStudioC++中的调试或发布模式,c++,debugging,visual-studio-2012,macros,release,C++,Debugging,Visual Studio 2012,Macros,Release,我正在做我的学校作业。在调试模式期间,我想打开控制台模式,在发布期间关闭控制台 我尝试了stackoverflow中推荐的marco,但它不起作用。我正在使用visual studio 2012空项目c++ #if DEBUG //doing something #else //Release mode doing something #endif 仅当通过编译器选项定义调试时,“如果调试”才起作用 默认情况下,未定义DEBUG,但会定义_DEBUG。如果定义了调试,请尝试,或者通过项目属

我正在做我的学校作业。在调试模式期间,我想打开控制台模式,在发布期间关闭控制台

我尝试了stackoverflow中推荐的marco,但它不起作用。我正在使用visual studio 2012空项目c++

#if DEBUG
 //doing something
#else
 //Release mode doing something
#endif
仅当通过编译器选项定义调试时,“如果调试”才起作用

默认情况下,未定义DEBUG,但会定义_DEBUG。如果定义了调试,请尝试,或者通过项目属性/配置属性/C/C++/预处理器/预处理器定义更改编译器选项以定义调试。

如果调试将在编译时而不是在运行时自行解决

NDEBUG是在发布模式中定义的标准宏。 我认为VisualStudio在调试模式下定义了调试宏

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


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

从您的评论来看,您遇到的问题似乎是打开一个控制台窗口并连接到标准输出,与调试版本和发布版本几乎没有关系

有关如何让GUI程序打开控制台并将stdout指向控制台的工作示例,请参阅MS Support文章:


实际上,在进一步的测试中,使用freopenCONOUT$,w,stdout;也行。由于某种原因,在我最初的测试中,它似乎不起作用。您可能还需要调用setvbuf以避免缓冲问题。

对于C,常量调试工作正常,只需确保在项目属性中启用它即可

在解决方案资源管理器中右键单击项目,转到项目属性,然后选择窗口右侧的“生成”选项并选中“定义调试常量”复选框

然后您可以使用这样的代码

#if DEBUG

// debug mode

#else

//release mode

#endif

这是针对Visual studio 2019的:

#ifdef _DEBUG
// do something in a debug build
#else
// do something in a release build
#endif

它怎么不起作用?您是否遇到编译时错误?对于发行版或调试版本,它是否做了相同的事情?什么?不知道为什么。在我的调试中包括的是IFAlloconsole freopenCONOUT$,w,stdout;我没有任何编译时错误。我必须在visual project或其他东西中设置任何属性吗?您好,我已经尝试了defined_DEBUG,但它仍然不起作用。如果definedDEBUG | defined | u debug,请您解释一下有关配置属性的一些细节。我试着把DEBUG放在那里,我能想到的是DEBUG=1;在配置属性下。不确定这样做是否正确it@user2306421当前位置仍然不清楚您的问题在哪里-您是否100%确定是if的问题?尝试在if和else块中输入一个错误,然后查看编译器的输出。@user2306421:if definedDEBUG | defined | DEBUG调试需要一个双栏:if definedDEBUG | | defined | defined | DEBUG感谢MichaelBurr告诉我缓冲区问题。c是从哪里来的?
#ifdef _DEBUG
// do something in a debug build
#else
// do something in a release build
#endif