在VS2012中为Debug构建定义DEBUG符号的位置?

时间:2012-11-28 07:54:00

标签: visual-c++ visual-studio-2012

我是Win32 DLL应用程序。选择了调试版本。我写了这样的代码:

#if DEBUG
fflush(logFile);
#endif

fflush(logFile);显示为灰色,因此我认为它不会被执行。 但我希望它被执行。这是否意味着在调试DEBUG中没有定义符号?我在哪里可以在VS2012中定义它?

3 个答案:

答案 0 :(得分:3)

预处理程序定义在项目设置下定义,如屏幕截图所示(注意_DEBUG那里):

enter image description here

请注意,在_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行,也可以使用发布版本。这一切都取决于你。