Ostrzeżenie C26819
Nieoznaczone upadek między etykietami przełączników (es.78).
Uwagi
Ta kontrola obejmuje niejawny upadek w instrukcjach switch. Niejawny upadek polega na tym, że przepływ sterowania przenosi się z jednego przypadku przełącznika bezpośrednio do następującego przypadku przełącznika bez użycia instrukcji [[fallthrough]];
. To ostrzeżenie jest zgłaszane po wykryciu niejawnego fallthrough w przypadku przełącznika zawierającego co najmniej jedną instrukcję.
Aby uzyskać więcej informacji, zobacz ES.78: Nie polegaj na niejawnej fallthrough instrukcji w switch
wytycznych podstawowych języka C++.
Przykład
W tym przykładzie niejawny upadek występuje z elementu nonempty switch
case
do następującego case
elementu .
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;
}
}
Aby rozwiązać ten problem, wstaw instrukcję [[fallthrough]];
, w której występuje 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;
}
}
Innym sposobem rozwiązania problemu jest usunięcie niejawnego fallthrough.
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;
}
}
Zobacz też
ES.78: Nie polegaj na niejawnej fallthrough w switch
instrukcjach