Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ej kommenterad genomströmning mellan växeletiketter (es.78).
Anmärkningar
Den här kontrollen omfattar implicita fallthrough i switch-instruktioner. Implicit genomströmning är när kontrollflödet överförs från ett växelfall direkt till följande växelfall utan att instruktionen [[fallthrough]]; används. Den här varningen utlöses när ett implicit genomfall identifieras i en switch-sats som innehåller minst en instruktion.
Mer information finns i ES.78: Förlita dig inte på implicit genomströmning i switch instruktioner i C++ Core Guidelines.
Exempel
I det här exemplet sker implicit genomströmning från en icke-tom switchcase till följande 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;
}
}
Åtgärda det här problemet genom att infoga en [[fallthrough]]; instruktion där genomgången sker.
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;
}
}
Ett annat sätt att åtgärda problemet är att ta bort det implicita genomfallet.
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;
}
}
Se även
ES.78: Förlita dig inte på implicit genomströmning i switch instruktioner