警告 C26818

switch ステートメントはすべてのケースはカバーしていません。 'default' ラベルを追加することを検討してください (es.79)。

解説

この検査は、intchar などの非列挙型を切り替える 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;
    }
}