C++ Attribut: fallthrough (seit C++17)
Zeigt an, dass der Fallthrough vom vorherigen Case-Label beabsichtigt ist und nicht von einem Compiler diagnostiziert werden sollte, der vor Fallthrough warnt.
Inhalt |
[bearbeiten] Syntax
[[fallthrough]]
|
|||||||||
[bearbeiten] Erklärung
Darf nur auf eine Null-Anweisung angewendet werden, um eine Fallthrough-Anweisung zu erstellen ([[fallthrough]];).
Eine Fallthrough-Anweisung darf nur in einer switch-Anweisung verwendet werden, wobei die nächste auszuführende Anweisung eine Anweisung mit einem Case- oder Default-Label für diese switch-Anweisung ist. Wenn sich die Fallthrough-Anweisung innerhalb einer Schleife befindet, muss die nächste (gelabelte) Anweisung Teil derselben Iteration dieser Schleife sein.
[bearbeiten] Beispiel
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 } }
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| CWG 2406 | C++17 | [[fallthrough]] konnte in einer Schleife erscheinen verschachtelt innerhalb der Ziel-Switch-Anweisung |
verboten |
[bearbeiten] Referenzen
- C++23 Standard (ISO/IEC 14882:2024)
- 9.12.6 Fallthrough-Attribut [dcl.attr.fallthrough]
- C++20 Standard (ISO/IEC 14882:2020)
- 9.12.5 Fallthrough-Attribut [dcl.attr.fallthrough]
- C++17 Standard (ISO/IEC 14882:2017)
- 10.6.5 Fallthrough-Attribut [dcl.attr.fallthrough]
[bearbeiten] Siehe auch
| C-Dokumentation für fallthrough
|