# V3518. AUTOSAR. A switch-expression should not have Boolean type. Consider using of 'if-else' construct.

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

Значение булевого типа может быть сконвертировано к целочисленному типу, поэтому его можно использовать в качестве управляющей переменной в выражении 'switch'. В этом случае использование конструкции 'if-else' является предпочтительным, так как оно дает более понятное и явное представление намерений программиста.

Пример:

    int foo(unsigned a, unsigned b)
    {
      while (a != 0 && b != 0)
      {
        switch (a > b) // <=
        {
        case 0:
          a -= b;
          break;
        default:
          b -= a;
          break;
        }
      }
      return a;
    }

Вместо этого следует написать:

    int foo(unsigned a, unsigned b)
    {
      while (a != 0 && b != 0)
      {
        if (a > b)
        {
          b -= a;
        }
        else
        {
          a -= b;
        }
      }
      return a;
    }

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

AUTOSAR-M6.4.7