MSVC でC26812の警告を消す方法

Visual studio (MSVC) 2019で C26812のwarningを無視する方法です

C26812 は enum class に関する警告で、たとえば次のようなメッセージが出力されます。

Prefer ‘enum class’ over ‘enum’ (Enum.3).

この警告はC++11で新しく追加された enum class と従来のenumを区別するためのもので、通常は無視すべきではありません。

しかし古いコードやC/C++のコードが混在している場合は、無視した方が手っ取り早いです。

というわけで、C26812 の警告を抑制する方法をまとめます。

特定のコードブロック内でのみC26812を無視する方法

#pragma warning でコードを括ります

#pragma warning(push)
#pragma warning(disable: 26812 )

// 警告が出るコード

#pragma warning(pop)

プロジェクト全体でC26812を無視する方法


rulesetといファイルを作って、プロジェクトのプロパティに追加します。

具体的には、まず以下の内容で、 disable_c26812.ruleset というファイルを作成します。

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="disable_c26812" ToolsVersion="16.0">
  <Include Path="nativerecommendedrules.ruleset" Action="Default" />
  <Rules AnalyzerId="Microsoft.Analyzers.NativeCodeAnalysis" RuleNamespace="Microsoft.Rules.Native">
    <Rule Id="C26812" Action="None" />
  </Rules>
</RuleSet>

このファイルをプロジェクトに登録します。手順は、 プロパティ → コード分析 → Microsoft → アクティブな規則 → プルダウンをクリックして → 参照... → 上記で作成した disable_c26912.ruleset を選択、となります。

面倒な場合は vcxproj ファイルを編集して、PropertyGroupに以下の行を追加します

    <CodeAnalysisRuleSet>c26812_disable.ruleset</CodeAnalysisRuleSet>