__attribute__((fallthrough))
是一个在编译器中使用的特性,用于指示在 switch 语句中的 case 标签中故意省略 break 语句时的意图。它告诉编译器,故意省略 break 是有意为之,而不是出现了错误或遗漏。
当使用 switch
语句时,通常每个 case
标签都会以 break
结束,以确保在匹配到一个 case 后,程序会跳出 switch 语句。然而,有时候我们可能希望在某些情况下,多个 case 标签共享相同的代码块,而不是每个 case 都有自己的代码块。
这就是 __attribute__((fallthrough))
的作用。当我们在一个 case 标签中故意省略 break 语句时,可以使用该特性来告诉编译器,这个省略是有意为之的,以避免编译器给出警告。
下面是一个示例代码,展示了如何使用 attribute((fallthrough)) :
#include <stdio.h>
int main(int argc, char *argv[])
{
int choice = 2;
switch (choice)
{
case 1:
printf("This is case 1.\n");
break;
case 2:
printf("This is case 2.\n");
__attribute__((fallthrough));
case 3:
printf("This is case 3.\n");
break;
default:
printf("Invalid choice.\n");
break;
}
return 0;
}
在上面的代码中,当 choice 的值为 2 时, case 2 中的 printf 语句会执行,然后通过 __attribute__((fallthrough))
告诉编译器继续执行下一个 case ,即 case 3 中的 printf 语句。
如果没有使用 __attribute__((fallthrough))
,可能编译器会给出一个警告
,因为通常情况下,我们希望每个 case 都以 break 结束。
- 注意, attribute((fallthrough)) 是特定于编译器的语法,不是标准 C 语言的一部分。因此,它的使用可能在不同的编译器上有所不同。在使用时,应该查阅相应的编译器文档以确保正确使用该特性。