C26819

스위치 레이블 사이에 주석이 추가 되지 않은 fallthrough (. 78).

설명

이 검사에서는 암시적 fallthrough의 switch 문을 설명 합니다. 암시적 fallthrough는 [[fallthrough]]; 문을 사용 하지 않고 한 switch case에서 직접 다음 스위치 케이스로 제어 흐름을 전송 하는 경우입니다. 이 경고는 하나 이상의 문을 포함 하는 switch case에서 암시적 fallthrough 검색 된 경우에 발생 합니다.

자세한 내용은 C++ Core Guidelines의 switch 문에서 암시적 Fallthrough를 사용 하지 마십시오 .

예제

이 샘플에서 암시적 fallthrough는 비어 있지 않은 스위치 사례에서 다음과 같은 경우에 발생 합니다.

void fn1();
void fn2();

void foo(int a)
{
    switch (a)
    {
        case 0: // implicit fallthrough from case 0 to case 1 is OK because case 0 is empty
        case 1:
            fn1(); // implicit fallthrough from case 1 into case 2
        case 2:
            fn2();
            break;
        default:
            break;
    }
}

솔루션

이 문제를 해결 하려면 fallthrough 발생 [[fallthrough]]; 하는 문을 삽입 합니다.

void fn1();
void fn2();

void foo(int a)
{
    switch (a)
    {
        case 0:
        case 1:
            fn1();
            [[fallthrough]]; // fallthrough is explicit
        case 2:
            fn2();
            break;
        default:
            break;
    }
}

이 문제를 해결 하는 또 다른 방법은 암시적 fallthrough를 제거 하는 것입니다.

void fn1();
void fn2();

void foo(int a)
{
    switch (a)
    {
        case 0:
        case 1:
            fn1();
            break; // case 1 no longer falls through into case 2
        case 2:
            fn2();
            break;
        default:
            break;
    }
}