次の方法で共有


warning pragma

コンパイラ警告メッセージの動作を選択的に変更できるようにします。

構文

#pragma warning(
  [ ]
 [ ... ]
[ n ]
#pragma warning( pop )

備考

次の警告指定子パラメーターを使用できます。

警告指定子 意味
、 、 、 指定したレベルを指定した警告に適用します。 例ample: は、警告レベルが 以上に設定されていない限り、警告 5033 (通常はレベル 1 の警告) をオフにします。 また、デフォルトでオフになっている指定された警告をオンにするためにも使用できます。
default 警告動作を既定値にリセットします。 また、既定ではオフになっている指定された警告もオンにします。 警告は、既定の文書化されたレベルで生成されます。

詳細については、「コンパイラの警告が既定でオフになっているを参照してください。
disable 指定した警告メッセージを発行しないでください。 オプションの プロパティを使用できます。
error 指定した警告をエラーとして報告します。
once 指定したメッセージを 1 回だけ表示します。
suppress スタック上の の現在の状態をプッシュし、次の行の指定された警告を無効にしてから、警告スタックをポップして、 状態がリセットされるようにします。
justification 警告を無効または抑制する理由を説明する省略可能な文字列。 Visual Studio 2022 バージョン 17.14 で導入されました。

次のコード ステートメントは、 パラメーターに複数の警告番号を含めることができる点と、同じ ディレクティブで複数の パラメーターを指定できることを示しています。

#pragma warning( disable : 4507 4034; once : 4385; error : 164 )

ただし、 フィールドが存在する場合は、指定できる警告番号は 1 つだけです。 次のコード ステートメントは、 フィールドの使用方法を示しています。

#pragma warning( disable : 4507, justification : "This warning is disabled" )

フィールドを使用して、警告が無効または抑制されている理由を説明します。 フィールドは、 と でのみサポートされます。 オプションを指定すると、理由は静的解析結果交換形式 (SARIF) 出力に表示されます。 その値は、UTF-8 でエンコードされた狭い文字列リテラルです。 SARIF ファイルを生成するには、 コンパイラ オプションを使用します。

このディレクティブは、次のコードと機能的に同等です。

// Disable warning messages 4507 and 4034.
#pragma warning(disable : 4507 4034)

// Issue warning C4385 only once.
#pragma warning(once : 4385)

// Report warning C4164 as an error.
#pragma warning(error : 164)

コンパイラは、0 から 999 までの任意の警告番号に 4000 を追加します。

4700 から 4999 の範囲の警告番号は、コード生成に関連付けられています。 これらの警告の場合、コンパイラが関数定義に到達したときに有効な警告の状態は、関数の残りの部分に対して有効なままです。 4699 より大きい警告番号の状態を変更する関数の の使用は、関数の終了後にのみ有効になります。 次の例は、コード生成警告メッセージを無効にして復元する の正しい配置を示しています。

// pragma_warning.cpp
// compile with: /W1
#pragma warning(disable:4700)
void Test()
{
   int x;
   int y = x; // no C4700 here
   #pragma warning(default:4700)   // C4700 enabled after compiling Test()
}

int main()
{
   int x;
   int y = x; // C4700
}

関数本体全体で、 の最後の設定が関数全体に対して有効になることに注意してください。

プッシュとポップ

では次の構文もサポートされています。省略可能な n パラメーターは警告レベル (1 から 4) を表します。

#pragma warning( push [ , n ] )

#pragma warning( pop )

には、すべての警告の現在の警告状態が格納されます。 は、すべての警告の現在の状態を格納し、グローバル警告レベルを nに設定します。

は、スタックにプッシュされた最後の警告状態をポップします。 と の間で警告状態に加えた変更は元に戻されます。 次の例を考えてみましょう。

#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
// Some code
#pragma warning( pop )

このコードの最後に、 は、すべての警告 (4705、4706、4707 を含む) の状態をコードの開始時の状態に復元します。

ヘッダー ファイルを記述するときに、 と を使用して、ユーザーによって行われた警告状態の変更によってヘッダーが正しくコンパイルされないようにすることができます。 ヘッダーの先頭に を使用し、末尾に します。 たとえば、警告レベル 4 で正常にコンパイルされないヘッダーがあるとします。 次のコードは、警告レベルを 3 に変更し、ヘッダーの末尾にある元の警告レベルを復元します。

#pragma warning( push, 3 )
// Declarations/definitions
#pragma warning( pop )

との両方で、警告抑制をきめ細かく制御できます。

  • [[gsl::suppress]] では、Microsoft C++ Code Analysisによって出力される警告のみが抑制されます。 これは、スコープまたは特定の宣言に適用できる C++ Core Guidelines チェックと共に使用します。
  • は、任意のコンパイラ警告に使用できます。 これは、コードの構造を大幅に変更せずに、特定のコード ブロックで警告を抑制する必要がある場合に便利です。

可能な限り、Microsoft C++ Code Analysisの警告を抑制するために、[[gsl::suppress]] を使用します。

警告を抑制するのに役立つコンパイラ オプションの詳細については、「 と 」を参照してください。

関連項目

Pragma ディレクティブと、 キーワードと キーワード