1. ホーム
  2. c++

[解決済み] fallthrough]]を使用してもGCCがフォールスルーについて警告するのはなぜですか?

2023-04-04 20:49:39

質問

次のコードでは、標準的な [[fallthrough]] 属性を使用して、フォールスルーが必要であることを文書化しています。

#include <iostream>

int main() {
    switch (0) {
        case 0:
            std::cout << "a\n";
            [[fallthrough]]
        case 1:
            std::cout << "b\n";
            break;
    }
}

GCC 7.1では、コードはエラーなしでコンパイルされます。しかし、コンパイラはまだフォールスルーについて警告します。

warning: this statement may fall through [-Wimplicit-fallthrough=]
    std::cout << "a\n";
    ~~~~~~~~~~^~~~~~~~

どうして?

どのように解決するのか?

属性の後にセミコロンがありません。

case 0:
    std::cout << "a\n";
    [[fallthrough]];
    //             ^
case 1:

[[fallthrough]] 属性は、空の文に適用されるものです ( P0188R1 ). 現在の Clang のトランクでは は、この場合に役立つエラーを出します :

error: fallthrough attribute is only allowed on empty statements
    [[fallthrough]]
      ^
note: did you forget ';'?
    [[fallthrough]]
                   ^
                   ;

更新:コディ・グレイ 報告済み がこの問題を GCC チームに報告しました。