1

谁能解释一下这个非常奇怪的现象?

在我的 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++ 项目中)

有解决方法吗?

4

0 回答 0