fallthrough
宏定义是一个编译器特性,它用于在代码switch语句中标记“落入”(fallthrough
)行为。在C和C++语言中,switch
语句中的每个case
标签通常会自动“贯穿”到下一个case
标签,除非使用break
语句显式终止。然而,有时候开发人员希望在不显式使用break的情况下,有意地允许程序继续执行下一个case
标签中的代码。fallthrough
宏的定义允许开发人员在代码中明确指定这种意图。
//Linux kernel: include\linux\compiler_attributes.h
#if __has_attribute(__fallthrough__)
# define fallthrough __attribute__((__fallthrough__))
#else
# define fallthrough do {} while (0) /* fallthrough */
#endif
在给定的宏定义中,fallthrough也许是一个编译器特定的属性(attribute)(或者是一个注解(annotation)),该属性告诉编译器如果在switch语句中使用了fallthrough
宏,就不要发出“未显式使用break”的警告。这样开发人员能够明确表达他们的意图,并避免编译器产生由于未使用break而引起的警告。 使用fallthrough
宏定义,开发人员可以在switch语句的case标签之间使用注释,以表明有意的落入行为。例如:
switch (value) {
case 1:
// 执行一些操作
fallthrough;
case 2:
// 继续执行一些操作
break;
default:
// 执行其他操作
break;
}