hicpp-multiway-paths-covered

此检查会发现代码路径未完全覆盖的情况。 此外,它建议在代码更清晰的情况下使用 if 而不是 switch规则 6.1.2规则 6.1.4 高完整性 C++ 编码标准得到执行。

if-else if 链缺少最终的 else 分支可能会导致程序执行意外,并且可能是逻辑错误的结果。 如果缺少的 else 分支是预期的,则可以使用带有说明性注释的空分支。 此警告在某些代码库中可能会很烦人,因此默认情况下它已禁用。

void f1() {
  int i = determineTheNumber();

   if(i > 0) {
     // Some Calculation
   } else if (i < 0) {
     // Precondition violated or something else.
   }
   // ...
}

类似的论点适用于 switch 语句,这些语句没有覆盖所有可能的代码路径。

// The missing default branch might be a logical error. It can be kept empty
// if there is nothing to do, making it explicit.
void f2(int i) {
  switch (i) {
  case 0: // something
    break;
  case 1: // something else
    break;
  }
  // All other numbers?
}

// Violates this rule as well, but already emits a compiler warning (-Wswitch).
enum Color { Red, Green, Blue, Yellow };
void f3(enum Color c) {
  switch (c) {
  case Red: // We can't drive for now.
    break;
  case Green:  // We are allowed to drive.
    break;
  }
  // Other cases missing
}

规则 6.1.4 要求每个 switch 语句至少有两个 case 标签,而不是一个 default 标签。 否则,switch 可以用 if 语句更好地表达。 没有标签的退化 switch 语句也会被捕获。

// Degenerated switch that could be better written as `if`
int i = 42;
switch(i) {
  case 1: // do something here
  default: // do something else here
}

// Should rather be the following:
if (i == 1) {
  // do something here
}
else {
  // do something here
}
// A completely degenerated switch will be diagnosed.
int i = 42;
switch(i) {}

选项

WarnOnMissingElse

布尔标志,用于激活缺少 else 分支的警告。 默认值为 false