Namespaces
Variants

C attribute: fallthrough (since C23)

From cppreference.net

表明从前一个 case 标签的贯穿行为是故意的,不应被会对贯穿行为发出警告的编译器诊断出来。

目录

语法

[[ fallthrough ]]
[[ __fallthrough__ ]]

说明

仅可在 属性声明 中使用,用于创建 fallthrough声明 [ [ fallthrough ] ] ; )。

fallthrough 声明仅可用于 switch 语句中,且下一个待执行的块项(语句、声明或标签)必须为该 switch 语句中带有 case default 标签的语句。

表明从前一个 case 标签的直落行为是故意的,不应被会对直落行为发出警告的编译器诊断出来。

示例

#include <stdbool.h>
void g(void) {}
void h(void) {}
void i(void) {}
void f(int n) {
  switch (n) {
    case 1:
    case 2:
      g();
     [[fallthrough]];
    case 3: // 直落不会产生警告
      h();
    case 4: // 编译器可能对直落发出警告
      if(n < 3) {
          i();
          [[fallthrough]]; // 正确
      }
      else {
          return;
      }
    case 5:
      while (false) {
        [[fallthrough]]; // 不合规:没有后续的 case 或 default 标签
      }
    case 6:
      [[fallthrough]]; // 不合规:没有后续的 case 或 default 标签
  }
}
int main(void) {}

参见

C++ 文档 关于 fallthrough