谁能解释一下这个非常奇怪的现象?
在我的 VS2005 托管 C++ 项目文件 (VCPROJ) 中定义:
<Configuration
Name="Debug|Win32"
....
PreprocessorDefinitions="WIN32;_DEBUG"
....
</Configuration>
<Configuration
Name="Release|Win32"
....
PreprocessorDefinitions="WIN32;NDEBUG"
....
</Configuration>
无论我在哪里使用符号 _Debug,它都能完美运行。例如:
#ifdef _DEBUG
#include "noexist.h"
#endif
产生错误
C1083: Cannot open include file: 'noexist.h': No such file or directory
当编译为调试时,它编译为发布时没有错误。
好的。
现在出现了奇怪的事情:文件 Resources.rc 中完全忽略了符号 _DEBUG。尽管 Visual Studio 本身插入了这些行:
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
etc...
Resources.rc 中不存在标志 _DEBUG(以及 NDEBUG)。
如果我插入相同的行
#ifdef _DEBUG
#include "noexist.h"
#endif
进入 Resources.rc 它既不会产生编译为 Debug 也不会编译为 Release 的错误!
这同样适用于
#ifdef NDEBUG
#include "noexist.h"
#endif
它作为 Release 和 Debug 编译没有错误!
这怎么可能?全局编译器符号如何出现在一个文件中而不出现在另一个文件中?
这是 Visual Studio 错误吗?
(在纯 C++ 项目中这工作正常,这个问题只在我的托管 C++ 项目中)
有解决方法吗?