我是Win32 DLL应用程序。选择了调试版本。我写了这样的代码:
#if DEBUG
fflush(logFile);
#endif
但fflush(logFile);
显示为灰色,因此我认为它不会被执行。
但我希望它被执行。这是否意味着在调试DEBUG
中没有定义符号?我在哪里可以在VS2012中定义它?
答案 0 :(得分:3)
预处理程序定义在项目设置下定义,如屏幕截图所示(注意_DEBUG
那里):
请注意,在_DEBUG
的情况下,您要检查它是否完全定义,而不是将它(可能缺少定义)与零进行比较。你想要:
#if defined(_DEBUG)
或
#ifdef _DEBUG
答案 1 :(得分:2)
默认情况下,Visual Studio C ++项目将为Debug项目配置定义宏_DEBUG
。它的值为1
,因此您可以使用#if
或#ifdef
对其进行测试。
但请注意,宏以下划线开头 - 如果您想使用名称DEBUG
(可能您现有使用该名称的代码),则需要自己将其添加到项目属性中( C/C++ | Preprocessor | Preprocessor definitions
)。或者您可以将以下内容放在每个翻译单元中包含的标题中(可能是stdafx.h
):
#if _DEBUG
#undef DEBUG
#define DEBUG 1
#endif
答案 2 :(得分:0)
每个项目都有两个版本:Debug和Release。调试版本已定义DEBUG
,就像您使用:
#define DEBUG
它使代码能够以不同的方式生成。代码(函数,类等)的编写者可以添加额外的对角线以帮助调试。 Debug构建仅用于调试,并且您不会将此构建(即使用Debug构建生成的EXE)提供给客户。
未定义DEBUG
符号的另一个构建版本用于发布版本。发布版本用于优化代码,代码级别,编译器设置级别和链接器级别。大多数对角线,断言,调试辅助功能都将被禁用 - 以便生成优化的可执行文件。
凡编写上述代码的人,都记得同样的事情。仅在调试版本正在运行时才刷新文件。您可以对#if
和#endif
发表评论,并编译fflush
行,也可以使用发布版本。这一切都取决于你。