# V3513. AUTOSAR. Every switch-clause should be terminated by an unconditional 'break' or 'throw' statement.

Данное диагностическое правило основано на руководстве AUTOSAR (AUTomotive Open System ARchitecture) по разработке программного обеспечения.

Каждая метка в 'switch' должна быть завершена оператором 'break' или выражением 'throw', не расположенным внутри условия.

Намеренное завершение каждой метки гарантирует, что поток управления не "провалится" в метку, расположенную ниже, и позволяет избежать ошибок при добавлении новых меток.

Исключением из этого правила являются пустые метки, расположенные последовательно.

Пример кода, на который анализатор выдаст предупреждение:

    void example_1(int cond, int a)
    {
      switch (cond)
      {
      case 1:
      case 2:
        break;
      case 3:  // <=
        if (a == 42)
        {
          DoSmth();
        }
      case 4:  // <=
        DoSmth2();
      default: // <=
        ;
      }
    }

Исправленный код:

    void example_1(int cond, int a)
    {
      switch (cond)
      {
      case 1:
      case 2:
        break;
      case 3:
        if (a == 42)
        {
           DoSmth();
        }
        break;
      case 4:
        DoSmth2();
        break;
      default:
        /* No action required */
        break;
      }
    }

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

AUTOSAR-M6.4.5