Sdílet prostřednictvím


Upozornění C26819

Neoznačené fallthrough between switch labels (es.78).

Poznámky

Tato kontrola zahrnuje implicitní fallthrough v příkazech switch. Implicitní fallthrough je, když tok řízení přenese z jednoho případu přepínače přímo do následujícího případu přepínače bez použití [[fallthrough]]; příkazu. Toto upozornění se vyvolá, když se v případě přepínače, který obsahuje alespoň jeden příkaz, zjistí implicitní fallthrough.

Další informace najdete v tématu ES.78: Nespoléhejte na implicitní pád v switch příkazech v pokynech pro C++ Core Guidelines.

Příklad

V této ukázce implicitní fallthrough dochází z nonempty switch case do následující 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;
    }
}

Pokud chcete tento problém vyřešit, vložte [[fallthrough]]; příkaz, ve kterém dochází k 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;
    }
}

Dalším způsobem, jak tento problém vyřešit, je odebrat implicitní 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;
    }
}

Viz také

ES.78: Nespoléhejte na implicitní fallthrough v switch příkazech