6.7.13.6 fallthrough 属性
约束
fallthrough只能出现在属性声明中,也就是类似:
c
[[fallthrough]];1
它不能带属性参数子句。
它只能出现在某个外围
switch语句内部。在它之后按控制流将要遇到的下一个块项,必须是最内层
switch对应的case或default标号。若它又位于某个迭代语句内部,那么那个“下一个语句”还必须属于该最内层迭代语句同一次次级块执行。
语义
- 若实现支持该属性,则:
c
__has_c_attribute(fallthrough)1
应返回 202311L。
推荐实践
fallthrough的目的,是压制实现原本可能给出的“从一个case落入下一个case”诊断。如果
[[fallthrough]];这条声明在运行时根本不可达,实现反而应倾向于给出诊断。放在循环里但下一条并不属于同一次循环执行的那类写法,标准示例明确判为约束违规。