C++ 属性: fallthrough (C++17 以降)
From cppreference.com
< cpp | language | attributes
前の case ラベルからのフォールスルーが意図的であり、フォールスルーについて警告するコンパイラによって診断されるべきではないことを示します。
目次 |
[編集] 構文
[[fallthrough]]
|
|||||||||
[編集] 説明
null ステートメントにのみ適用して、フォールスルー ステートメント ([[fallthrough]];) を作成できます。
フォールスルー ステートメントは、switch ステートメント内でのみ使用できます。この場合、次に実行されるステートメントは、その switch ステートメントの case または default ラベルを持つステートメントです。フォールスルー ステートメントがループ内にある場合、次に続く (ラベル付きの) ステートメントは、そのループの同じイテレーションの一部である必要があります。
[編集] 例
このコードを実行
void f(int n) { void g(), h(), i(); switch (n) { case 1: case 2: g(); [[fallthrough]]; case 3: // no warning on fallthrough h(); case 4: // compiler may warn on fallthrough if (n < 3) { i(); [[fallthrough]]; // OK } else { return; } case 5: while (false) { [[fallthrough]]; // ill-formed: next statement is not // part of the same iteration } case 6: [[fallthrough]]; // ill-formed, no subsequent case or default label } }
[編集] 欠陥レポート
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| CWG 2406 | C++17 | [[fallthrough]] はループ内に現れる可能性がある ターゲットの switch ステートメント内にネストされている |
禁止された |
[編集] 参照
- C++23標準 (ISO/IEC 14882:2024)
- 9.12.6 フォールスルー属性 [dcl.attr.fallthrough]
- C++20 standard (ISO/IEC 14882:2020)
- 9.12.5 フォールスルー属性 [dcl.attr.fallthrough]
- C++17 standard (ISO/IEC 14882:2017)
- 10.6.5 フォールスルー属性 [dcl.attr.fallthrough]
[編集] 関連項目
| C ドキュメント (fallthrough)
|