﻿# V544\. It is suspicious that the value 'X' of HRESULT type is compared with 'Y'\.

Анализатор обнаружил потенциальную ошибку при работе с переменной типа HRESULT\.

HRESULT\- это 32\-разрядное значение, разделенное на три различных поля: код серьезности ошибки, код устройства и код ошибки\. Для работы со значением HRESULT служат специальные константы, такие как S\_OK, E\_FAIL, E\_ABORT и так далее\. А для проверки значений тип HRESULT предназначены такие макросы как SUCCEEDED, FAILED\.

Предупреждение V544 выдается в том случае, если переменную типа HRESULT пытаются сравнить с \-1, true или false\. Рассмотрим пример:

```cpp
HRESULT hr;
...
if (hr == -1)
{
}
```

Сравнение со значением "\-1" некорректно\. Коды ошибок могут быть различны\. Например, это может быть 0x80000002L \(Ran out of memory\), 0x80004005L \(unspecified failure\), 0x80070005L \(General access denied error\) и так далее\. Для проверки значения HRESULT в данном случае необходимо использовать макрос FAILED, объявленный в "WinError\.h"\. Корректный вариант кода:

```cpp
if (FAILED(hr))
{
}
```

Дополнительные ресурсы:

1. MSDN\. [Common HRESULT Values](https://docs.microsoft.com/en-us/windows/win32/seccrypto/common-hresult-values)\.
1. Wikipedia\. [HRESULT](https://en.wikipedia.org/wiki/HRESULT)\.