Данное диагностическое правило основано на руководстве 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; } }
Данная диагностика классифицируется как:
|