﻿# V562\. Bool type value is compared with value of N\. Consider inspecting the expression\.

Анализатор обнаружил ситуацию, когда значение типа bool сравнивается с числом\. Скорее всего, это свидетельствует о наличии в коде ошибки\.

Рассмотрим пример:

```cpp
if (0 < A < 5)
```

Этим кодом программист, недостаточно хорошо знакомый с языком Си\+\+, пытался определить, лежит значение в диапазоне от 0 до 5 или нет\. На самом деле, вычисления будут происходить в следующей последовательности: \(\(0 < A\) < 5\)\. Результат выражения "0 < A" имеет тип bool, а значит всегда меньше 5\.

Корректный вариант проверки:

```cpp
if (0 < A && A < 5)
```

Предыдущий пример, напоминает ошибку, которые делают студенты\. Однако от подобных ошибок не застрахованы и профессиональные разработчики\.

Рассмотрим второй пример:

```cpp
if (! (fp = fopen(filename, "wb")) == -1) {
  perror("opening image file failed");
  exit(1);
}
```

Здесь сразу 2 ошибки разного плана\. Во\-первых, функция "fopen" возвращает указатель, и сравнивать возвращаемое значение следует с NULL\. Программист спутал функцию "fopen" с "open", которая как раз возвращает  "\-1" в случае ошибки\. Второй недочет в коде связан с тем, что вначале выполняется операция отрицания "\!", а только затем сравнение с "\-1"\. Значение типа bool не имеет смысла сравнивать с "\-1" и именно поэтому анализатор и обратил внимание на приведенный код\.

Корректный вариант:

```cpp
if ( (fp = fopen(filename, "wb")) == NULL) {
  perror("opening image file failed");
  exit(1);
}
```