Avviso C26819
Fallthrough non annotato tra etichette switch (es.78).
Osservazioni:
Questo controllo illustra il fallthrough implicito nelle istruzioni switch. Il fall-through implicito si verifica quando il flusso di controllo passa da un caso switch direttamente a un caso switch seguente senza l'uso dell'istruzione [[fallthrough]];
. Questo avviso viene generato quando viene rilevato un fallthrough implicito in un caso switch contenente almeno un'istruzione.
Per altre informazioni, vedere ES.78: Don't rely on implicit fallthrough in statements in the C++ Core Guidelines .For more information, see ES.78: Don't rely on implicit fallthrough in switch
statements in the C++ Core Guidelines.
Esempio
In questo esempio, il fallthrough implicito si verifica da un valore nonempty switch
case
a un oggetto seguente 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;
}
}
Per risolvere questo problema, inserire un'istruzione [[fallthrough]];
in cui si verifica il 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;
}
}
Un altro modo per risolvere il problema consiste nel rimuovere il fallthrough implicito.
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;
}
}
Vedi anche
ES.78: non basarsi su fallthrough implicito nelle switch
istruzioni