警告 C26819

切換標籤 (es.78) 之間的未標注後置。

備註

這項檢查涵蓋 switch 語句中的隱含遞補。 隱含的遞補是當控制流程從一個交換器案例直接傳輸至下列參數案例時,而不需要使用 [[fallthrough]]; 語句。 當在包含至少一個語句的 switch 案例中偵測到隱含的遞補時,就會引發這個警告。

如需詳細資訊,請參閱 ES.78:不要依賴 C++ 核心指導方針中語句 中的 switch 隱含後置。

範例

在此範例中,隱含的遞補會從非空白 switchcase 到下列 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 隱含遞補