Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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