Partilhar via


Aviso C26819

Fallthrough sem anotações entre os rótulos switch (es.78).

Comentários

Essa verificação cobre o fallthrough implícito em instruções de comutador. O fallthrough implícito é quando o fluxo de controle é transferido de um caso de comutador diretamente para um caso de comutador a seguir sem o uso da instrução [[fallthrough]];. Esse aviso é gerado quando um fallthrough implícito é detectado em um caso de comutador que contém pelo menos uma instrução.

Para obter mais informações, confira ES.78: não confie no fallthrough implícito em instruções switch nas Diretrizes Principais do C++.

Exemplo

Nesta amostra, um fallthrough implícito ocorre de um switch não vazio case não vazio para um case seguinte.

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 instrução [[fallthrough]]; 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;
    }
}

Confira também

ES.78: Não confie no fallthrough implícito em declarações switch