Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Область видимости, в которой находится метка, должна быть составным выражением, которое представляет собой тело 'switch'. Это означает, что метка не должна быть вложена ни в какой блок, кроме как в тело 'switch', и это тело должно быть составным выражением.
Следовательно, все метки, принадлежащие одному 'switch', должны находиться в одной области видимости. Следование этому правилу позволяет сохранить читаемость и структурированность кода.
Пример 1:
void example_1(int param, bool b) { switch (param) { case 1: DoSmth1(); if (b) { case 2: // <= DoSmth2(); } break; default: assert(false); break; } }
Рассмотренный пример сложен для понимания. Чтобы анализатор не выдавал предупреждения, следует написать так:
void example_1(int param, bool b) { switch (param) { case 1: DoSmth1(); if (b) { DoSmth2(); } break; case 2: DoSmth2(); break; default: assert(false); break; } }
В следующем примере тело 'switch' не является составным, поэтому анализатор также выдаст предупреждение:
void example_2(int param) { switch (param) default: DoDefault(); }
Исправленный вариант:
void example_2(int param) { switch (param) { default: DoDefault(); break; } }
Данная диагностика классифицируется как:
|