如何在 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 为此获得了标准化语法: