Partilhar via


Aviso C26819

Fallthrough não anotado entre etiquetas de interruptor (es.78).

Observações

Esta verificação abrange fallthrough implícito em instruções switch. Queda implícita ocorre quando o fluxo de controle é transferido de uma instrução switch diretamente para a instrução switch seguinte sem usar a instrução [[fallthrough]];. Este aviso é gerado quando é detectada uma queda implícita em um bloco de instrução "switch" contendo pelo menos uma instrução.

Para obter mais informações, consulte ES.78: Não confie em queda implícita em switch declarações nas Diretrizes Básicas do C++.

Exemplo

Neste exemplo, o "fallthrough" implícito ocorre de um bloco switchcase não vazio para o seguinte 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;
    }
}

Para corrigir esse problema, insira uma [[fallthrough]]; instrução onde ocorre o 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;
    }
}

Outra maneira de corrigir o problema é remover o fallthrough implícito.

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

Ver também

ES.78: Não confie na passagem implícita entre declarações switch