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

Данное диагностическое правило основано на руководстве [AUTOSAR](https://www.autosar.org/) \(AUTomotive Open System ARchitecture\) по разработке программного обеспечения\.

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

Пример: 

```cpp
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;
}
```

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

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