如何在C中明确地落实

时间:2017-06-13 02:27:09

标签: c gcc c99 gcc-warning

新版本的gcc提供Wimplicit-fallthrough,这对于大多数switch语句来说都很棒。但是,我有一个switch语句,我希望允许所有case语句的掉头。

有没有办法明确地通过?我宁愿避免使用Wno-implicit-fallthrough编译此文件。

编辑:我正在寻找一种方法来通过显式(如果可能的话)进行下降,而不是通过编译器开关或编译指示来关闭警告。

3 个答案:

答案 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?