如何在 C 中进行显式失败
How to do an explicit fall-through in C
较新版本的 gcc 提供了 Wimplicit-fallthrough
,这对于大多数 switch 语句来说非常有用。但是,我有一个 switch 语句,我希望允许从所有 case 语句中跳出。
有没有一种方法可以显式失败?我宁愿避免为这个文件使用 Wno-implicit-fallthrough
进行编译。
编辑:我正在寻找一种方法来明确显示下降(如果可能的话),而不是通过编译器开关或 pragma 关闭警告。
您应该能够使用 GCC diagnostic pragmas 为您的源文件或源文件的某些部分禁用该特定警告。尝试将其放在文件的顶部:
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
使用__attribute__ ((fallthrough))
switch (condition) {
case 1:
printf("1 ");
__attribute__ ((fallthrough));
case 2:
printf("2 ");
__attribute__ ((fallthrough));
case 3:
printf("3\n");
break;
}
GCC fallghrough 魔术评论
如果可以的话,你不应该使用它,它很疯狂,但很高兴知道:
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 提供了 Wimplicit-fallthrough
,这对于大多数 switch 语句来说非常有用。但是,我有一个 switch 语句,我希望允许从所有 case 语句中跳出。
有没有一种方法可以显式失败?我宁愿避免为这个文件使用 Wno-implicit-fallthrough
进行编译。
编辑:我正在寻找一种方法来明确显示下降(如果可能的话),而不是通过编译器开关或 pragma 关闭警告。
您应该能够使用 GCC diagnostic pragmas 为您的源文件或源文件的某些部分禁用该特定警告。尝试将其放在文件的顶部:
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
使用__attribute__ ((fallthrough))
switch (condition) {
case 1:
printf("1 ");
__attribute__ ((fallthrough));
case 2:
printf("2 ");
__attribute__ ((fallthrough));
case 3:
printf("3\n");
break;
}
GCC fallghrough 魔术评论
如果可以的话,你不应该使用它,它很疯狂,但很高兴知道:
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 为此获得了标准化语法: