警告 C26819
switch ラベルどうしの間に、注釈の付いていないフォールスルーがある (es.78)。
解説
このチェックでは、switch ステートメントの暗黙的なフォールスルーが対象となります。 暗黙的なフォールスルーは、[[fallthrough]];
ステートメントを使用せずに、制御フローが 1 つのスイッチ ケースから次のスイッチ ケースに直接転送される場合です。 この警告は、少なくとも 1 つのステートメントを含むスイッチ ケースで暗黙的なフォールスルーが検出されると発生します。
詳細については、C++ Core Guidelines の「ES.78: switch
ステートメント内の暗黙的なフォールスルーに依存しない」を参照してください。
例
このサンプルでは、暗黙的なフォールスルーは空でない switch
case
値から次 case
のようになります。
void fn1();
void fn2();
void foo(int a)
{
switch (a)
{
case 0: // implicit fallthrough from case 0 to case 1 is OK because case 0 is empty
case 1:
fn1(); // implicit fallthrough from case 1 into case 2
case 2: // Warning C26819.
fn2();
break;
default:
break;
}
}
この問題を解決するには、フォールスルーが発生する場所に [[fallthrough]];
ステートメントを挿入します。
void fn1();
void fn2();
void foo(int a)
{
switch (a)
{
case 0:
case 1:
fn1();
[[fallthrough]]; // fallthrough is explicit
case 2:
fn2();
break;
default:
break;
}
}
この問題を解決するもう 1 つの方法は、暗黙的なフォールスルーを削除することです。
void fn1();
void fn2();
void foo(int a)
{
switch (a)
{
case 0:
case 1:
fn1();
break; // case 1 no longer falls through into case 2
case 2:
fn2();
break;
default:
break;
}
}
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示