新版本的gcc提供Wimplicit-fallthrough
,这对于大多数switch语句来说都很棒。但是,我有一个switch语句,我希望允许所有case语句的掉头。
有没有办法明确地通过?我宁愿避免使用Wno-implicit-fallthrough
编译此文件。
编辑:我正在寻找一种方法来通过显式(如果可能的话)进行下降,而不是通过编译器开关或编译指示来关闭警告。
答案 0 :(得分:17)
使用__attribute__ ((fallthrough))
switch (condition) {
case 1: __attribute__ ((fallthrough));
case 2: __attribute__ ((fallthrough));
case 3:
printf("1..3\n");
break;
}
答案 1 :(得分:2)
您应该能够使用GCC diagnostic pragmas禁用源文件或源文件某些部分的特定警告。尝试将它放在文件的顶部:
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
答案 2 :(得分:2)
海湾合作委员会关于魔术的评论
您不应该使用它,这很疯狂,但是很高兴知道:
int main(int argc, char **argv) {
(void)argv;
switch (argc) {
case 0:
argc = 1;
// fall through
case 1:
argc = 2;
};
}
通过以下方式防止在GCC 7.4.0上发出警告:
gcc -Wall -Wextra main.c
man gcc
描述了如何根据以下值识别不同的注释:
-Wimplicit-fallthrough=n
C ++ 17 [[fallthrough]]
属性
C ++ 17为此提供了标准化语法:GCC 7, -Wimplicit-fallthrough warnings, and portable way to clear them?