# V2525. MISRA. Every 'switch' statement should contain non-empty switch-clauses.

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

Данная диагностика классифицируется как:

MISRA-C-2012-16.6 MISRA-C-2023-16.6 MISRA-CPP-2008-6.4.8