다음을 통해 공유


경고 C26819

스위치 레이블 간에 주석 처리되지 않은 폴스루입니다(es.78).

설명

이 검사는 스위치 문의 암시적 폴스루를 다룹니다. 암시적 폴스루는 [[fallthrough]]; 문을 사용하지 않고 제어 흐름이 하나의 스위치 사례에서 다음 스위치 사례로 직접 전송되는 경우입니다. 이 경고는 하나 이상의 문이 포함된 스위치 사례에서 암시적 폴스루가 검색되면 발생합니다.

자세한 내용은 C++ Core Guidelines의 ES.78: switch 문에서 암시적 폴스루에 의존하지 않음을 참조하세요.

예시

이 샘플에서는 비어 있지 않은 switch case에서 다음 case로 암시적 폴스루가 발생합니다.

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:    // Warning C26819.
            fn2();
            break;
        default:
            break;
    }
}

이 문제를 해결하려면 폴스루가 발생하는 곳에 [[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;
    }
}

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

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;
    }
}

참고 항목

ES.78: switch 문에서 암시적 대체에 의존하지 않음