V2524. MISRA. A switch-label should only appear at the top level of the compound statement forming the body of a 'switch' statement.
Данное диагностическое правило основано на руководстве 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;
}
}
Данная диагностика классифицируется как:
|