警告 C26818
switch ステートメントはすべてのケースはカバーしていません。 'default' ラベルを追加することを検討してください (es.79)。
解説
この検査は、int
や char
などの非列挙型を切り替える switch ステートメント内の欠落 default
ラベルをカバーしています。
詳細については、「C++ Core Guidelines」の「ES.79: default を使用して一般的なケース (のみ) を処理する」を参照してください。
例
この例では、int
を切り替えるときに default
ラベルがありません。
void fn1();
void fn2();
void foo(int a)
{
switch (a)
{
case 0:
fn1();
break;
case 2:
fn2();
break;
}
}
解決策
この問題を解決するには、残りのケースをすべてカバーするように default
ラベルを挿入します。
void fn1();
void fn2();
void default_action();
void foo(int a)
{
switch (a)
{
case 0:
fn1();
break;
case 2:
fn2();
break;
default:
default_action();
break;
}
}
default アクションを実行する必要がない場合は、空の default
ラベルを挿入して、他のケースが忘れられていないことを示します。
void fn1();
void fn2();
void foo(int a)
{
switch (a)
{
case 0:
fn1();
break;
case 2:
fn2();
break;
default:
// do nothing for the rest of the cases
break;
}
}