コンパイラ警告メッセージの動作を選択的に変更できるようにします。
構文
#pragma warning(
warning-specifier
:
warning-number-list
[,
justification
:
string-literal
]
[;
warning-specifier
:
warning-number-list
... ])
#pragma warning( push
[,
n ])
#pragma warning( pop )
備考
次の警告指定子パラメーターを使用できます。
警告指定子 | 意味 |
---|---|
1 、 2 、 3 、 4 |
指定したレベルを指定した警告に適用します。 例ample: #pragma warning (3 : 5033) は、警告レベルが /w3 以上に設定されていない限り、警告 5033 (通常はレベル 1 の警告) をオフにします。 また、デフォルトでオフになっている指定された警告をオンにするためにも使用できます。 |
default |
警告動作を既定値にリセットします。 また、既定ではオフになっている指定された警告もオンにします。 警告は、既定の文書化されたレベルで生成されます。 詳細については、「コンパイラの警告が既定でオフになっているを参照してください。 |
disable |
指定した警告メッセージを発行しないでください。 オプションの justification プロパティを使用できます。 |
error |
指定した警告をエラーとして報告します。 |
once |
指定したメッセージを 1 回だけ表示します。 |
suppress |
スタック上の pragma の現在の状態をプッシュし、次の行の指定された警告を無効にしてから、警告スタックをポップして、pragma 状態がリセットされるようにします。 オプションの justification プロパティを使用できます。 |
次のコード ステートメントは、warning-number-list
パラメーターに複数の警告番号を含めることができる点と、同じ warning-specifier
ディレクティブで複数の pragma パラメーターを指定できることを示しています。
#pragma warning( disable : 4507 4034; once : 4385; error : 164 )
ただし、 justification
フィールドが存在する場合は、指定できる警告番号は 1 つだけです。 次のコード ステートメントは、 justification
フィールドの使用方法を示しています。
#pragma warning( disable : 4507, justification : "This warning is disabled" )
justification
フィールドを使用すると、警告が無効または抑制される理由を説明できます。
justification
フィールドは、disable
と suppress
warning-specifier
でのみサポートされます。 この値は、 /analyze:log:includesuppressed
オプションが指定されている場合に SARIF 出力に表示されます。 その値は、UTF-8 でエンコードされた狭い文字列リテラルです。
このディレクティブは、次のコードと機能的に同等です。
// 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 より大きい警告番号の状態を変更する関数の warning
pragma の使用は、関数の終了後にのみ有効になります。 次の例は、コード生成警告メッセージを無効にして復元する warning
pragma の正しい配置を示しています。
// 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
}
関数本体全体で、warning
pragma の最後の設定が関数全体に対して有効になることに注意してください。
プッシュとポップ
warning
pragma では次の構文もサポートされています。省略可能な n パラメーターは警告レベル (1 から 4) を表します。
#pragma warning( push [ , n ] )
#pragma warning( pop )
pragma
warning( push )
には、すべての警告の現在の警告状態が格納されます。
pragma
warning( push, n )
は、すべての警告の現在の状態を格納し、グローバル警告レベルを nに設定します。
pragma
warning( pop )
は、スタックにプッシュされた最後の警告状態をポップします。
push
と pop
の間で警告状態に加えた変更は元に戻されます。 次の例を考えてみましょう。
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
// Some code
#pragma warning( pop )
このコードの最後に、pop
は、すべての警告 (4705、4706、4707 を含む) の状態をコードの開始時の状態に復元します。
ヘッダー ファイルを記述するときに、push
と pop
を使用して、ユーザーによって行われた警告状態の変更によってヘッダーが正しくコンパイルされないようにすることができます。 ヘッダーの先頭に push
を使用し、末尾に pop
します。 たとえば、警告レベル 4 で正常にコンパイルされないヘッダーがあるとします。 次のコードは、警告レベルを 3 に変更し、ヘッダーの末尾にある元の警告レベルを復元します。
#pragma warning( push, 3 )
// Declarations/definitions
#pragma warning( pop )
警告を抑制するのに役立つコンパイラ オプションの詳細については、「/FI
と /w
」を参照してください。