Данное диагностическое правило основано на руководстве AUTOSAR (AUTomotive Open System ARchitecture) по разработке программного обеспечения.
Каждая метка в 'switch' должна быть завершена оператором 'break' или выражением 'throw', не расположенным внутри условия.
Намеренное завершение каждой метки гарантирует, что поток управления не "провалится" в метку, расположенную ниже, и позволяет избежать ошибок при добавлении новых меток.
Исключением из этого правила являются пустые метки, расположенные последовательно.
Пример кода, на который анализатор выдаст предупреждение:
void example_1(int cond, int a) { switch (cond) { case 1: case 2: break; case 3: // <= if (a == 42) { DoSmth(); } case 4: // <= DoSmth2(); default: // <= ; } }
Исправленный код:
void example_1(int cond, int a) { switch (cond) { case 1: case 2: break; case 3: if (a == 42) { DoSmth(); } break; case 4: DoSmth2(); break; default: /* No action required */ break; } }
Данная диагностика классифицируется как:
|