Upozornění C26819
Neoznačené fallthrough between switch labels (es.78).
Poznámky
Tato kontrola zahrnuje implicitní fallthrough v příkazech switch. Implicitní fallthrough je, když tok řízení přenese z jednoho případu přepínače přímo do následujícího případu přepínače bez použití [[fallthrough]];
příkazu. Toto upozornění se vyvolá, když se v případě přepínače, který obsahuje alespoň jeden příkaz, zjistí implicitní fallthrough.
Další informace najdete v tématu ES.78: Nespoléhejte na implicitní pád v switch
příkazech v pokynech pro C++ Core Guidelines.
Příklad
V této ukázce implicitní fallthrough dochází z nonempty switch
case
do následující 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;
}
}
Pokud chcete tento problém vyřešit, vložte [[fallthrough]];
příkaz, ve kterém dochází k 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;
}
}
Dalším způsobem, jak tento problém vyřešit, je odebrat implicitní 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;
}
}
Viz také
ES.78: Nespoléhejte na implicitní fallthrough v switch
příkazech