その非常に奇妙な現象を説明できる人はいますか?
私の VS2005 Managed 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 はファイル Resources.rc で完全に無視されます。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...
フラグ _DEBUG (および NDEBUG) は Resources.rc には存在しません。
同じ行を挿入すると
#ifdef _DEBUG
#include "noexist.h"
#endif
Resources.rc に挿入しても、Debug としてコンパイルされたエラーも Release としてコンパイルされたエラーも発生しません。
同じことが当てはまります
#ifdef NDEBUG
#include "noexist.h"
#endif
Release および Debug としてエラーなしでコンパイルされます。
そんなことがあるものか ?グローバル コンパイラ シンボルが 1 つのファイルに存在し、別のファイルには存在しないのはなぜですか?
これは Visual Studio のバグですか?
(純粋な C++ プロジェクトでは、これは正常に機能します。この問題は、私のマネージ C++ プロジェクトでのみ発生します)
回避策はありますか?