bugprone-switch-missing-default-case

确保没有默认情况的 switch 语句会被标记,重点关注涵盖非枚举类型的情况,因为编译器可能不会发出警告。

没有默认情况的 switch 语句会导致意外行为和对所有可能情况的处理不完整。当 switch 语句缺少默认情况时,如果遇到与任何指定情况都不匹配的值,程序将继续执行,没有任何定义的行为或处理。

此检查有助于识别缺少默认情况的 switch 语句,使开发人员能够确保所有可能的情况都得到妥善处理。添加默认情况允许优雅地处理意外或不匹配的值,从而降低程序错误和意外行为的风险。

示例

// Example 1:
// warning: switching on non-enum value without default case may not cover all cases
switch (i) {
case 0:
  break;
}

// Example 2:
enum E { eE1 };
E e = eE1;
switch (e) { // no-warning
case eE1:
  break;
}

// Example 3:
int i = 0;
switch (i) { // no-warning
case 0:
  break;
default:
  break;
}

注意

当 switch 语句没有处理所有枚举值时,枚举类型已经由编译器警告覆盖(包含在 -Wswitch 中)。此检查侧重于编译器警告可能不存在的非枚举类型。

另请参阅

The CppCoreGuideline ES.79 提供有关 switch 语句的指南,包括始终提供默认情况的建议。