DirectX 11 枚举 D3D11_USAGE 和 D3D_PRIMITIVE_TOPOLOGY 警告

DirectX 11 enum D3D11_USAGE and D3D_PRIMITIVE_TOPOLOGY warning

在使用 DirectX 11 和 MSVS2019 时,我在使用枚举 'D3D11_USAGE' 和 'D3D_PRIMITIVE_TOPOLOGY:

时收到以下警告

Warning C26812 The enum type 'D3D11_USAGE' is unscoped. Prefer 'enum class' over 'enum' (Enum.3).

Warning C26812 The enum type 'D3D_PRIMITIVE_TOPOLOGY' is unscoped. Prefer 'enum class' over 'enum' (Enum.3).

我该怎么做才能解决这些警告?该代码可以很好地处理警告,但我宁愿让它们消失。

谢谢。

C26812 是 Microsoft Visual C++ 代码分析 (/analyze ) C++ Core Guidelines checkers 规则的一部分。

通常 Windows 10 SDK 系统 headers 中的警告会被自动抑制。 最有可能的问题是您使用的是旧版 DirectX SDK,因为那些 headers 不会被自动抑制。

首先要考虑的是删除对旧版 DirectX SDK 的所有使用。 Visual Studio 2019 附带的 Windows 10 SDK 已经包含您需要的所有 Direct3D headers。如果您使用的是 XNAMath,则可以改用 DirectXMath instead. If you are using the legacy D3DX11 library, move to one of the open source alternatives. If you are using XAudio 2.7, use the XAudio2Redist instead. If you are using the D3DX library to compile your HLSL shaders, use D3DCompile directly instead. If you are using XInput 1.3, look at using a built-in XInput 版本。

如果删除旧版 DirectX SDK 不可行,请调整您的 include/lib 路径,以便尽可能获得 Windows 10 SDK headers。有关详细信息,请参阅 Microsoft Docs,但简而言之,编辑 VC++ Directories,以便 DXSDK_DIR include/lib 路径为 LAST 而不是搜索顺序中的 FIRST

您也可以通过使用 #pragma warning(disable : 26812) and/or command-line 选项 /wd26812 抑制警告来忽略警告。 C++ Core Guidelines 检查器有点迂腐,在某些情况下实际上只是 advice.

Visual C++ 团队已从 Microsoft 本机推荐规则 中删除了大量检查器,但仍列出了 26812 个。您可以创建自定义规则集,也可以禁用构建时的代码分析。就个人而言,我只是在我的项目中抑制了这个,因为我有充分的理由不使用 class enum.