Предупреждение C26819
Неотменованное резервное руководство между метками коммутатора (es.78).
Замечания
Эта проверка охватывает неявное резервное руководство в инструкциях switch. Неявное резервное руководство заключается в том, что поток управления передается из одного варианта переключения непосредственно в следующий вариант коммутатора без использования инструкции [[fallthrough]];
. Это предупреждение возникает при обнаружении неявного резервного руководства в случае коммутатора, содержащего по крайней мере одну инструкцию.
Дополнительные сведения см. в статье ES.78. Не опирайтесь на неявное резервное руководство в инструкциях, приведенных в switch
основных рекомендациях C++ .
Пример
В этом примере неявное резервное руководство происходит из неявного в switch
case
следующее 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;
}
}
Чтобы устранить эту проблему, вставьте [[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;
}
}
Другим способом устранения проблемы является удаление неявного резервного руководства.
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;
}
}
См. также
ES.78: не полагаться на неявное резервное руководство в switch
инструкциях