web-dev-qa-db-ja.com

Cで明示的なフォールスルーを行う方法

新しいバージョンのgccはWimplicit-fallthroughを提供します。これは、ほとんどのswitchステートメントに最適です。ただし、すべてのケースステートメントからのフォールスルーを許可する1つのswitchステートメントがあります。

明示的なフォールスルーを行う方法はありますか?このファイルをWno-implicit-fallthroughでコンパイルする必要がないようにしたいと思います。

編集:私はコンパイラのスイッチまたはプラグマを介して警告をオフにしないで、可能であればフォールスルーを明示的にする方法を探しています。

21
dlasalle

__attribute__ ((fallthrough)) を使用します

switch (condition) {
    case 1: __attribute__ ((fallthrough));
    case 2: __attribute__ ((fallthrough));
    case 3:
        printf("1..3\n");
        break;
}
18
dasblinkenlight

GCCフォールグローマジックコメント

あなたはこれを使うべきではありません、それは正気ではありませんが、知っておくと良いでしょう:

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警告、およびそれらをクリアするポータブルな方法?

GCC診断プラグマ を使用して、ソースファイルまたはソースファイルの一部に対する特定の警告を無効にできるはずです。これをファイルの先頭に配置してみてください:

#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
2
David Grayson