ZHCU820Y September 2004 – June 2021
通常,对于 switch 表达式值 0 和 5,编译器会生成代码来测试 0 和 5,因为编译器必须处理可能的值 1-4。Topic Link Label7.8.5.2.1 中的 __never_executed() 内在函数断言 val 不能取值 1-4,因此编译器只需要生成一个测试 (val < 6) 即可处理两个 case 标签。
此外,使用 __never_executed() 内在函数会导致断言:如果 val 不是 0 或 5,那么它必须是 14,并且编译器不需要生成代码来测试 val == 14。
__never_executed() 内在函数仅在指定为采用默认 case 标签的单个语句时才被定义。编译器会在任何其他上下文中忽略对内在函数的使用。