我正在做我的学校作业。在调试模式期间,我想打开我的控制台模式,在发布期间关闭控制台。
我按照stackoverflow中的建议尝试了marco,但它不起作用。我正在使用 Visual Studio 2012(空项目 C++)
#if DEBUG
//doing something
#else
//Release mode doing something
#endif
我正在做我的学校作业。在调试模式期间,我想打开我的控制台模式,在发布期间关闭控制台。
我按照stackoverflow中的建议尝试了marco,但它不起作用。我正在使用 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
那里,您可以在您选择的构建配置中为您的项目添加宏。
从您的评论看来,您遇到的问题似乎是打开并连接了一个控制台窗口stdout
(与 DEBUG 与 RELEASE 构建几乎没有关系)。
请参阅 MS 支持文章信息:从 GUI 应用程序调用 CRT 输出例程,以获取有关如何让 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()
调用以避免缓冲问题。
这是针对 Visual Studio 2019 的:
#ifdef _DEBUG
// do something in a debug build
#else
// do something in a release build
#endif
对于 C#,常量 DEBUG 工作正常,只需确保在项目属性中启用它即可。
转到项目属性(通过在解决方案资源管理器中右键单击您的项目),然后选择窗口右侧的构建选项并选中定义调试常量复选框。
然后你可以使用这样的代码。
#if DEBUG
// debug mode
#else
//release mode
#endif