﻿# V2570\. MISRA\. Operands of the logical '&&' or the '\|\|' operators, the '\!' operator should have 'bool' type\.

Данное диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

Данное диагностическое правило актуально только для C\+\+\. Использование логических операторов '\!', '&&' и '\|\|' с переменными, имеющими отличный от 'bool' тип, не имеет смысла, вряд ли предназначено для этого и может указывать на присутствие ошибки\. Возможно, должны были использоваться побитовые операторы \('&', '\|' или '\~'\)\.

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

```cpp
void Foo(int x, int y, int z)
{
  if ((x + y) && z)
  {
    ....
  }
}

void Bar(int *x)
{
  if (!x)
  {
    ....
  }
}
```

Примеры правильного кода с точки зрения правила:

```cpp
void Foo(int x, int y, int z)
{
  if ((x + y) & z)
  {
    ....
  }
}

void Foo(int x, int y, int z)
{
  if ((x < y) && (y < z))
  {
    ....
  }
}

void Bar(int *x)
{
  if (x == NULL)
  {
    ....
  }
}
```