Атрибут C++: fallthrough (начиная с C++17)
Указывает, что переход к следующей метке case из предыдущей намеренный и не должен вызывать предупреждение компилятора, который предупреждает о таком переходе.
Синтаксис
[[fallthrough]] |
Пояснение
Может применяться только к пустому оператору, чтобы создать оператор fallthrough ([[fallthrough]];).
Оператор fallthrough может использоваться только в операторе switch, где следующим выполняемым оператором является оператор с меткой case или default для этого оператора switch. Если оператор fallthrough находится внутри цикла, следующий оператор с меткой должен относиться к той же итерации этого цикла.
Пример
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 Атрибут fallthrough [dcl.attr.fallthrough]
- Стандарт C++20 (ISO/IEC 14882:2020):
- 9.12.5 Атрибут fallthrough [dcl.attr.fallthrough]
- Стандарт C++17 (ISO/IEC 14882:2017):
- 10.6.5 Атрибут fallthrough [dcl.attr.fallthrough]
См. также
Документация по C для fallthrough |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/language/attributes/fallthrough