Spec-Zone.ru › C++

Атрибут 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API