Namespaces
Variants

C attribute: fallthrough (since C23)

From cppreference.net

Указывает, что переход к следующей метке case из предыдущей является преднамеренным и не должен диагностироваться компилятором, который выдает предупреждения о сквозном выполнении.

Содержание

Синтаксис

[[ fallthrough ]]
[[ __fallthrough__ ]]
**Примечание:** В данном HTML-фрагменте весь текст находится внутри тегов ` `, которые согласно инструкциям не подлежат переводу. Поэтому перевод не требуется, исходный формат полностью сохранен.

Объяснение

Может использоваться только в объявлении атрибутов для создания объявления fallthrough ( [ [ fallthrough ] ] ; ).

Объявление fallthrough может использоваться только в switch операторе, где следующим обрабатываемым элементом блока (оператором, объявлением или меткой) является оператор с case или default меткой для данного оператора switch.

Указывает, что переход к следующей метке case из предыдущей является преднамеренным и не должен диагностироваться компилятором, который выдает предупреждения о сквозном выполнении.

Пример

#include <stdbool.h>
void g(void) {}
void h(void) {}
void i(void) {}
void f(int n) {
  switch (n) {
    case 1:
    case 2:
      g();
     [[fallthrough]];
    case 3: // нет предупреждения о сквозном выполнении
      h();
    case 4: // компилятор может выдать предупреждение о сквозном выполнении
      if(n < 3) {
          i();
          [[fallthrough]]; // OK
      }
      else {
          return;
      }
    case 5:
      while (false) {
        [[fallthrough]]; // некорректно: нет последующей метки case или default
      }
    case 6:
      [[fallthrough]]; // некорректно: нет последующей метки case или default
  }
}
int main(void) {}

Смотрите также