1

その非常に奇妙な現象を説明できる人はいますか?

私の 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++ プロジェクトでのみ発生します)

回避策はありますか?

4

0 に答える 0