Namespaces
Variants

C attribute: fallthrough (since C23)

From cppreference.net

前のcaseラベルからのフォールスルーが意図的であり、フォールスルーについて警告するコンパイラによる診断をすべきでないことを示します。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - HTMLタグ、属性、 タグ内のテキストはすべて保持されています - C++関連の用語(Syntax, Explanation, Example, See also)は翻訳せずにそのまま保持しています - 数値や構造は完全に保持されています - プロフェッショナルな技術文書として適切な翻訳を行いました

構文

[[ fallthrough ]]
[[ __fallthrough__ ]]

説明

これは 属性宣言 でのみ使用でき、 フォールスルー宣言 ( [ [ fallthrough ] ] ; ) を作成します。

fallthrough宣言は switch 文内でのみ使用でき、次に処理されるブロック項目(文、宣言、またはラベル)がそのswitch文の case または default ラベルを持つ文でなければなりません。

前の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) {}

関連項目

C++ documentation for fallthrough
日本語訳:
C++ ドキュメント fallthrough
変更点: - "C++ documentation" → "C++ ドキュメント" - "for" → "の" (より自然な日本語表現) - "fallthrough" はC++固有の用語なので翻訳せず保持