Предупреждение компилятора (уровень 1, ошибка, отключение) C5262
неявное падение происходит здесь; вы отсутствуете
break
заявление? Использование[[fallthrough]]
, когдаbreak
оператор намеренно опущен между вариантами
Замечания
Поток управления, который неявно падает между случаями инструкций switch, является историческим источником ошибок для C и C++. Хотя у нас был __fallthrough
макрос SAL, он не был полезен для диагностика компилятора сборки. Так как клиенты имеют устаревший код, который "попадает" на цель, он не может дать активное предупреждение без какого-либо способа указания намеренного падения. В C++17 [[fallthrough]]
атрибут был добавлен для указания такого экземпляра. Компилятор может учитывать этот атрибут и подавлять новое предупреждение.
Предупреждение компилятора C5262 является новым в Visual Studio 2022 версии 17.4 и отключено по умолчанию и рассматривается как ошибка по умолчанию при включении. Чтобы продолжить поддержку устаревшего кода без разрывов сборки, необходимо явно включить C5262. Дополнительные сведения о включении этого предупреждения см . в предупреждениях компилятора, отключенных по умолчанию.
Пример
Пример кода показывает диагностика для switch
случаев, которые проходят без break
return
инструкций или [[fallthrough]]
атрибутов.
// C5262.cpp
// compile using /std:c++17 /we5262
int main(int argc, char** argv)
{
switch (argc)
{
case 0: ++argv;
case 1:
case 2: argv++;
default:
argv = 0;
}
}
/*
When built, the compiler produces this output:
.\C5262.cpp(9,9): error C5262: implicit fall-through occurs here; are you missing a break statement? Use [[fallthrough]] when a break statement is intentionally omitted between cases
case 1:
^
.\C5262.cpp(8,17): note: statement that may fall through is here
case 0: ++argv;
^
.\C5262.cpp(11,9): error C5262: implicit fall-through occurs here; are you missing a break statement? Use [[fallthrough]] when a break statement is intentionally omitted between cases
default:
^
.\C5262.cpp(10,17): note: statement that may fall through is here
case 2: argv++;
*/
Чтобы устранить эту проблему, если поток управления между вариантами является преднамеренным, используйте [[fallthrough]]
атрибут.