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