警告 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;
    }
}