Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 switch w wytycznych podstawowych języka C++.
Przykład
W tym przykładzie niejawny upadek występuje z elementu nonempty switchcase do następującego caseelementu .
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