# V3545. AUTOSAR. Operands of the logical '&&' or the '||' operators, the '!' operator should have 'bool' type.

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

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

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

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

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

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

    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)
      {
        ....
      }
    }

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

AUTOSAR-M5.3.1