既定で無効になっているコンパイラ警告

コンパイラは、既定でオフになっている警告をサポートしています。既定でオフになっているのは、ほとんどの開発者にとってそれらの警告が役に立たないためです。 場合によっては、これらにより、スタイルの選択や、旧形式のコードの一般的な表現形式について警告される場合があります。 その他の警告は、言語に対する Microsoft 拡張機能の使用に関する警告です。 一部の警告は、プログラマが誤った想定をしている可能性が高い領域を示します。これらの想定により、予期しない動作や定義されていない動作が発生する可能性があります。 これらの警告をすべて有効にすると、それらのうちの一部の警告が、ライブラリ ヘッダーに何度も表示される場合があります。 C ランタイム ライブラリと C++ 標準ライブラリは、警告レベル /W4 でのみ警告が出力されないように設計されています。

既定で無効になっている警告を有効にする

次のいずれかのオプションを使用して、既定で通常はオフの警告を有効にできます。

  • #pragma warning(default :warning_number)

    指定した警告 (warning_number) がその既定レベルで有効になります。 警告に関するドキュメントには、既定のレベルの警告が記載されています。

  • #pragma warning(warning_level:warning_number)

    指定した警告 (warning_number) が、指定したレベル (warning_level) で有効になります。

  • /Wall

    /Wall は既定では無効のすべての警告を有効にします。 このオプションを使用する場合、/wd オプションを使用することで個々の警告を無効にできます。

  • /wLnnnn

    このオプションを使用すると、警告 nnnn がレベル L で有効になります。

既定で無効になっている警告

次の警告は、Visual Studio 2015 以降のバージョンでは既定で無効になっています。

警告 メッセージ
C4061 (レベル 4) 列挙型 'enumeration' の switch 文内の列挙子 ’identifier’ は、case ラベルによって明示的に扱われていません
C4062 (レベル 4) enumerator 'identifier' in a switch of enum 'enumeration' is not handled (列挙型 'enumeration' の switch 文内の列挙子 identifier' は、扱われていません)
C4165 (レベル 1) 'HRESULT' は 'bool' に変換されようとしています。続行しますか?
C4191 (レベル 3) 'operator': 'type_of_expression' から 'type_required' への変換は保証されません
C4242 (レベル 4) 'identifier': 'type1' から 'type2' への変換で、データ消失の可能性があります
C4254 (レベル 4) 'operator': 'type1' から 'type2' への変換で、データ消失の可能性があります
C4255 (レベル 4) 'function': 関数プロトタイプがありません: '()' を '(void)' に変換します
C4263 (レベル 4) 'function': メンバー関数はどの基底クラスの仮想メンバー関数もオーバーライドしません
C4264 (レベル 1) 'virtual_function': 仮想メンバー関数用に基底クラス 'class' から使用可能なオーバーライドはありません。関数は隠されます
C4265 (レベル 3) 'class': クラスは仮想関数を含んでいますが、デストラクターは仮想デストラクターではありません
C4266 (レベル 4) 'function': 仮想メンバー関数用に基底クラス型 'type' から使用可能なオーバーライドはありません。関数は隠されます
C4287 (レベル 3) 'operator': 符号なし/負の定数が一致しません
C4289 (レベル 4) 非標準の拡張が使用されています: 'var': for ループで宣言したループ コントロール変数が for ループ スコープの外側で使用されています
C4296 (レベル 4) 'operator': 式は常に false です
C4339 (レベル 4) 'type': 未定義の型の使用が CLR meta-data で検出されました。この型を使用するとランタイム例外が起きる可能性があります
C4342 (レベル 1) 動作変更: 'function' が呼び出されますが、前のバージョンではメンバー演算子が呼び出されていました
C4350 (レベル 1) 動作変更: 'member1' が 'member2' の代わりに呼び出されました
C4355 'this' : ベース メンバー初期化リストで使用されました。
C4365 (レベル 4) 'action': conversion from 'type_1' to 'type_2', signed/unsigned mismatch ('action': 'type_1' から 'type_2' への変換で、signed と unsigned の数値を比較しようとしました)
C4370 (レベル 3) パッキングの改善のために、前バージョンのコンパイラからクラスのレイアウトが変更されました。
C4371 (レベル 3) 'classname': メンバー 'member' のパッキングの改善により、クラスのレイアウトが、前バージョンのコンパイラから変更された可能性があります
C4388 (レベル 4) signed と unsigned の数値を比較しようとしました。
C4412 (レベル 2) 'function': 関数シグネチャが型 'type' を含んでいます。C++ オブジェクトを、純粋なコードと混合またはネイティブ コードとの間で渡すことは安全ではありません
C4426 (レベル 1) ヘッダーを含めた後で最適化フラグが変更されました。#pragma optimize() が原因であることが考えられます 14.1
C4435 (レベル 4) 'class1': /vd2 下のオブジェクトのレイアウトは仮想ベース 'class2' により変更されます
C4437 (レベル 4) 仮想ベース 'class1' から 'class2' への dynamic_cast は特定のコンテキストでは失敗する場合があります
C4444 (レベル 3) トップ レベルの '__unaligned' がこのコンテキストで実装されていません。
C4464 (レベル 4) 相対インクルード パスに '..' が含まれています
C4471 (レベル 4) 対象範囲外の列挙の事前宣言には基になる型が必要です (int が想定されます) Perm
C4472 (レベル 1) 'identifier' はネイティブの列挙型です。マネージド列挙型を宣言するには、アクセス指定子 (private/public) を追加します
C4514 (レベル 4) 'function': 参照されていないインライン関数は削除されました
C4536 (レベル 4) 'type name': 型名がメタデータの限度である 'limit' 文字を超えています
C4545 (レベル 1) コンマ前の式は、引数リストのない関数として評価します。
C4546 (レベル 1) コンマの前の関数呼び出しに引数一覧がありません。
C4547 (レベル 1) 'operator': コンマの前の演算子は無効です。有効な演算子を指定してください
C4548 (レベル 1) コンマ前の式は無効です。有効な式を指定してください。
C4549 (レベル 1) 'operator1': コンマの前の演算子は無効です。'operator2' を指定してください
C4555 (レベル 1) 式の影響はありません; 式の副作用が必要です。
C4557 (レベル 3) '__assume' は影響 'effect' を含んでいます
C4571 (レベル 4) 情報: catch(...) の意味が Visual C++ 7.1 から変更されています。構造化例外 (SEH) はキャッチされません
C4574 (レベル 4) 'identifier' が '0' に定義されています。'#if identifier' を使用しますか?
C4577 (レベル 1) 例外処理モードが指定されていない状態で 'noexcept' が使用されています。例外時には終了が保証されません。 /EHsc を指定します
C4582 (レベル 4) 'type': コンストラクターは暗黙的に呼び出されません
C4583 (レベル 4) 'type': デストラクターは暗黙的に呼び出されません
C4587 (レベル 1) 'anonymous_structure': 動作変更: コンストラクターは暗黙的には呼び出されなくなりました
C4588 (レベル 1) 'anonymous_structure': 動作変更: デストラクターは暗黙的には呼び出されなくなりました
C4596 (レベル 4) 'identifier': メンバー宣言内の修飾名が不正です 14.3Perm
C4598 (レベル 1 とレベル 3) '#include "header"': プリコンパイル済みヘッダーのヘッダー番号 header-number が、その位置の現在のコンパイルと一致しません 14.3
C4599 (レベル 3) 'optionpath': コマンド ライン引数の数値 number がプリコンパイル済みヘッダーと一致しません 14.3
C4605 (レベル 1) '/Dmacro' は現在のコマンド ラインで指定されていますが、プリコンパイル済みヘッダーの構築時には指定されませんでした
C4608 (レベル 3) 'union_member' は既に初期化子リスト 'union_member' 内の他の共用体メンバーにより初期化されています Perm
C4619 (レベル 3) #pragma warning: 警告番号 'number' がありません
C4623 (レベル 4) 'derived class': 基底クラスの既定コンストラクターにアクセスできないため、既定のコンストラクターは生成できませんでした。
C4625 (レベル 4) 'derived class': 基底クラスのコピー コンストラクターにアクセスできないため、コピー コンストラクターは生成できませんでした。
C4626 (レベル 4) 'derived class': 基底クラスの代入演算子にアクセスできないため、代入演算子は生成できませんでした。
C4628 (レベル 1) digraphs は -Ze でサポートされていません。 文字のシーケンス 'digraph' は 'char' の代替トークンとして解釈されません
C4640 (レベル 3) 'instance': ローカル スタティック オブジェクトの構築がスレッド セーフではありません
C4643 (レベル 4) 名前空間 std での 'identifier' の事前宣言は C++ 標準では許可されていません。 15.8
C4647 (レベル 3) 動作の変更: __is_pod(type) は、以前のバージョンでは異なる値を持ちます
C4654 (レベル 4) プリコンパイル済みヘッダー行のインクルードよりも前にあるコードは無視されます。 プリコンパイル済みヘッダーにコードを追加します。 14.1
C4668 (レベル 4) 'symbol' は、'directives' を '0' に置換するプリプロセッサ マクロとして定義されていません
C4682 (レベル 4) 'symbol': 方向性のあるパラメーター属性が指定されていません。[in] を既定とします
C4686 (レベル 3) 'user-defined type': 動作と UDT の戻り値の呼び出し規則に変更がある可能性があります
C4692 (レベル 1) 'function': 公開されたメンバーのシグネチャはアセンブリ プライベート ネイティブ型 'native_type' を含んでいます
C4710 (レベル 4) 'function': インライン関数ではありません
C4738 (レベル 3) メモリに 32 ビットの浮動結果を格納します。パフォーマンスが低下する可能性があります
C4746 'expression' の揮発性のアクセスは /volatile:<iso|ms> 設定に従います。__iso_volatile_load/store 組み込み関数の使用を検討してください
C4749 (レベル 4) 条件付きでサポート: 非標準のレイアウト型 'type' に offsetof が適用されています
C4767 (レベル 4) セクション名 'symbol' が 8 文字よりも長いため、リンカーによって切り捨てられます
C4774 (レベル 4) 'string': 引数 number に必要な書式文字列が文字列リテラルではありません
C4777 (レベル 4) 'function': 書式文字列 'string' は型が 'type1' の引数を必要としますが、variadic 引数 number は型が 'type2' です
C4786 (レベル 3) 'symbol': オブジェクト名は 'number' 文字にデバッグ情報で切り詰められました
C4800 (レベル 4) 'type' からブール型への暗黙的な変換です。 情報が損失している可能性があります 16.0
C4820 (レベル 4) 'bytes' バイトのパディングをコンスラクト 'member_name' の後に追加しました
C4822 (レベル 1) 'member': ローカル クラスのメンバー関数は本体がありません
C4826 (レベル 2) 'type1' から 'type2' への変換は符号拡張されています。 これは、予期しない実行時の動作を発生させる可能性があります。
C4837 (レベル 4) 検出されたトライグラフ: '??character' は 'character' に置き換えられました
C4841 (レベル 4) 非標準の拡張機能が使用されています: 複合メンバー指定子が offsetof で使用されています
C4842 (レベル 4) 多重継承を使用する型に対する 'offsetof' の適用結果は、コンパイラ リリース間において一貫性が保証されません
C4866 (レベル 4) 'file(line_number)' コンパイラでは operator の呼び出しの評価順序を左から右方向に設定できない場合があります
C4868 (レベル 4) 'file(line_number)' コンパイラでは、中かっこで囲まれた初期化子リストの評価順序を左から右方向に設定できない場合があります
C4905 (レベル 1) 'LPSTR' にキャストされた幅の広いリテラル文字列
C4906 (レベル 1) 'LPWSTR' にキャストされたリテラル文字列
C4917 (レベル 1) 'declarator': GUID はクラス、インターフェイス、または名前空間のみに関連付けることができます
C4928 (レベル 1) コピー初期化が正しくありません。複数のユーザー定義の変換が暗黙的に適用されています。
C4931 (レベル 4) number ビット ポインター用にタイプ ライブラリがビルドされていることを想定します。
C4946 (レベル 1) reinterpret_cast が関連クラスの間で使用されました: 'class1' と 'class2'
C4962 'function': 最適化によってプロファイル データに矛盾が生じたため、ガイド付き最適化のプロファイルを無効にします
C4986 (レベル 4) 'symbol': 例外の指定が前の宣言と一致しません
C4987 (レベル 4) 非標準の拡張機能が使用されています: 'throw (...)' です。
C4988 (レベル 4) 'symbol': 変数がクラス/関数のスコープ外で宣言されています
C5022 'type': 複数の移動コンストラクターが指定されました
C5023 'type': 複数の移動代入演算子が指定されました
C5024 (レベル 4) 'type': 移動コンストラクターが暗黙的に削除済みとして定義されました
C5025 (レベル 4) 'type': 移動代入演算子が暗黙的に削除済みとして定義されました
C5026 (レベル 1 とレベル 4) 'type': 移動コンストラクターが暗黙的に削除済みとして定義されました
C5027 (レベル 1 とレベル 4) 'type': 移動代入演算子が暗黙的に削除済みとして定義されました
C5029 (レベル 4) 非標準の拡張機能が使用されました: C++ のアラインメント属性は変数、データ メンバー、タグの種類にのみ適用されます
C5031 (レベル 4) #pragma warning(pop): 一致していないポップの警告状態が別のファイルにプッシュされた可能性があります 14.1
C5032 (レベル 4) 対応する #pragma warning(pop) がない #pragma warning(push) が検出されました 14.1
C5034 組み込み 'intrinsic' を使用すると、関数 function-name がゲスト コードとしてコンパイルされます 15.3
C5035 フィーチャー 'feature' を使用すると、関数 function-name がゲスト コードとしてコンパイルされます 15.3
C5036 (レベル 1) /hybrid:x86arm64 でコンパイルする場合の 'type1' から 'type2' への varargs 関数ポインター変換 15.3
C5038 (レベル 4) データ メンバー 'member1' は、データ メンバー 'member2' の後に初期化されます 15.3
C5039 (レベル 4) 'function': -EHc の extern C 関数に渡される、スローされる可能性のある関数へのポインターまたは参照。 この関数で例外がスローされた場合、未定義の動作が発生する可能性があります。 15.5
C5041 (レベル 4) 'member-name': constexpr 静的データ メンバーのアウトオブライン定義は不要で、C++17 では使用されていません。 15.2
C5042 (レベル 3) 'function': 標準 C++ ではブロック スコープの関数宣言に 'inline' を指定することはできません。'inline' 指定子を削除してください 15.5
C5045 /Qspectre スイッチが指定されている場合、コンパイラではメモリの読み込みに Spectre の軽減策が挿入されます 15.7
C5052 (レベル 3) キーワード 'keyword-name' は C++version 導入され、'option' コマンドライン オプションを使用する必要があります 16.1
C5204 (レベル 3) A class with virtual functions has non-virtual trivial destructor. (仮想関数を持つクラスには、非仮想的な簡単なデストラクターがあります。) 16.5
C5214 (レベル 4) volatile 修飾型のオペランドに 'keyword' を適用することは、C++20 では非推奨です 16.7
C5215 (レベル 4) 'function-parameter': volatile 修飾型の関数パラメーターは C++20 では非推奨です 16.7
C5216 (レベル 4) 'return-type': volatile 修飾の戻り値の型は C++20 では非推奨です 16.7
C5217 (レベル 4) volatile を含む構造化バインディング宣言は C++20 では非推奨です 16.7
C5219 (レベル 2) 'type-1' から 'type-2' への暗黙の型変換です。データが失われる可能性があります 16.7
C5220 (レベル 4) 'member': 揮発性修飾型の非静的データ メンバーは、
コンパイラによって生成されたコピーまたは移動コンストラクターとコピーまたは移動代入演算子がトリビアルではないことを示さなくなりました 16.7
C5233 (レベル 4) 明示的なラムダ キャプチャ 'identifier' は使用されません 16.10
C5240 (レベル 4) 'attribute-name': 属性はこの構文の位置では無視されます 16.10
C5243 (レベル 1) 'type-name': 不完全なクラス 'class-name' を使用すると、ABI の制限のために定義ルール違反が 1 つ発生する可能性があります 16.10
C5245 (レベル 4) 'function': 内部リンケージ含む参照されていない関数が削除されました
C5246 (レベル 1) 'member': サブオブジェクトの初期化は中かっこで囲む必要があります 16.10
C5247 (レベル 1) セクション 'section-name' は C++ 動的初期化用に予約されています。 セクションを手動で作成すると、C++ の動的な初期化が妨げられ、未定義の動作が発生する可能性があります 16.11
C5248 (レベル 1) セクション 'section-name' は C++ 動的初期化用に予約されています。 セクションに手動で配置された変数は最適化されている可能性があり、コンパイラによって生成された動的初期化子に対する順序が指定されていません 16.11
C5249 (レベル 1) 型 'enumeration_name' の 'bitfield' には、指定されたビット フィールドの幅 'bitfield_width' で表現できない値を持つ名前付き列挙子があります。 17.0
C5250 (レベル 3) 'function_name': 組み込み関数は宣言されていません。 17.0
C5251 (レベル 4) ヘッダー 17.1 を含めた後に segment-name が変更されました
C5254 (レベル 4) 言語機能 'terse static assert' にはコンパイラ フラグ '/std:c++17' が必要です 17.1

14.1 この警告は、Visual Studio 2015 Update 1 以降で使用できます。
14.3 この警告は、Visual Studio 2015 Update 3 以降で使用できます。
15.2 この警告は、Visual Studio 2017 バージョン 15.2 以降で使用できます。
15.3 この警告は、Visual Studio 2017 バージョン 15.3 以降で使用できます。
15.5 この警告は、Visual Studio 2017 バージョン 15.5 以降で使用できます。
15.7 この警告は、Visual Studio 2017 バージョン 15.7 以降で使用できます。
15.8 この警告は、Visual Studio 2017 バージョン 15.8 以降で使用できます。
16.0 この警告は、Visual Studio 2019 RTM 以降で使用できます。
16.5 この警告は、Visual Studio 2019 バージョン 16.5 以降で使用できます。
16.7 この警告は、Visual Studio 2019 バージョン 16.7 以降で使用できます。
16.10 この警告は、Visual Studio 2019 バージョン 16.10 以降で使用できます。
16.11 この警告は、Visual Studio 2019 バージョン 16.11 以降で使用できます。
17.0 この警告は、Visual Studio 2022 バージョン 17.0 以降で使用できます。
17.1 この警告は、Visual Studio 2022 バージョン 17.1 以降で使用できます。
Perm この警告は、/permissive- コンパイラ オプションが設定されている場合を除いて無効です。

以前のバージョンで既定で無効になっている警告

この警告は、Visual Studio 2015 バージョン 15.3 では既定で無効になっており、Visual Studio 2015 バージョン 15.5 では有効になっています。

警告 メッセージ
C4768 リンケージ指定子の前の __declspec 属性は無視されます

これらの警告は、Visual Studio 2015 よりも前のコンパイラのバージョンでは、既定で無効になっています。

警告 メッセージ
C4302 (レベル 2) 'conversion': 'type1' から 'type2' へ切り詰めます
C4311 (レベル 1) 'variable': ポインターを 'type' から 'type' へ切り詰めます
C4312 (レベル 1) 'operation': 'type1' からより大きいサイズの 'type2' へ変換します
C4319 (レベル 1) 'operator': 'type1' からより大きいサイズの 'type2' へのゼロ拡張です

この警告は、Visual Studio 2012 よりも前のコンパイラのバージョンでは、既定で無効になっています。

警告 メッセージ
C4431 (レベル 4) 型指定子がありません - int と仮定しました。 メモ: C は、現在 int を既定値としてサポートしていません

関連項目

warning pragma