Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило различается для языков C и C++. В C каждый 'switch' должен иметь по крайней мере две непустых метки, которыми могут быть 'case' или 'default'. В C++ каждый 'switch' должен иметь по крайней мере одну непустую метку 'case'.
Конструкции 'switch', не удовлетворяющие этим условиям, являются избыточными и могут являться признаком ошибки программиста.
Пример 1:
void example_1(int param)
{
switch(param)
{
case 0:
default:
Func();
break;
}
}
Подобный 'switch' является излишним и не имеет никакого смысла. Независимо от значения переменной 'param', всегда будет выполняться только тело 'default'.
На следующий пример анализатор не будет выдавать предупреждение:
void example_2(int param)
{
switch(param)
{
case 0:
DoSmth1();
break;
case 1:
DoSmth2();
break;
....
default:
Func();
break;
}
}
Пример кода, на который анализатор выдаст предупреждение только при использовании компилятора для языка C:
void example_3(int param)
{
switch(param)
{
case 10:
case 42:
DoMath();
break;
}
}
Данная диагностика классифицируется как:
|