有人能解释我这种非常奇怪的现象吗?
在我的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
编译为Debug时编译时没有错误编译为Release。
行。
现在出现了一件奇怪的事: 在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 ++项目中,这个工作正常,这个问题只出现在我的Managed C ++项目中)
有解决方法吗?