Namespaces
Variants

C attribute: fallthrough (since C23)

From cppreference.net

이전 case 레이블에서의 fall through가 의도적이며, fallthrough에 대해 경고하는 컴파일러에 의해 진단되어서는 안 됨을 나타냅니다.

목차

구문

[[ fallthrough ]]
[[ __fallthrough__ ]]

설명

오직 속성 선언 에서만 사용되어 폴스루 선언 을 생성할 수 있습니다 ( [ [ fallthrough ] ] ; ).

fallthrough 선언은 오직 switch 문 내에서만 사용될 수 있으며, 이때 다음으로 만나게 될 블록 항목(문, 선언, 또는 레이블)이 해당 switch 문의 case 또는 default 레이블을 가진 문이어야 합니다.

이전 case 레이블에서의 fall through가 의도적이며, fallthrough에 대해 경고하는 컴파일러에 의해 진단되어서는 안 됨을 나타냅니다.

예제

#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: // fallthrough에 대한 경고 없음
      h();
    case 4: // 컴파일러가 fallthrough에 대해 경고할 수 있음
      if(n < 3) {
          i();
          [[fallthrough]]; // 허용됨
      }
      else {
          return;
      }
    case 5:
      while (false) {
        [[fallthrough]]; // 잘못된 형식: 후속 case 또는 default 레이블 없음
      }
    case 6:
      [[fallthrough]]; // 잘못된 형식: 후속 case 또는 default 레이블 없음
  }
}
int main(void) {}

참고 항목

C++ documentation for fallthrough