__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 语言的一部分。因此,它的使用可能在不同的编译器上有所不同。在使用时,应该查阅相应的编译器文档以确保正确使用该特性。