Предупреждение C6230

Неявное приведение между семантически разными типами целых чисел: использование HRESULT в логическом контексте

Замечания

Это предупреждение указывает, что в HRESULT контексте, в котором ожидается логический результат, например if оператор. Этот тест, скорее всего, даст неверные результаты. Например, обычное значение успешного выполнения для HRESULT (S_OK) равно false, если оно проверяется как логическое значение.

Имя анализа кода: USING_HRESULT_IN_BOOLEAN_CONTEXT

Пример

Следующий код создает это предупреждение:

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);

  if (hr)
  {
    // code ...
  }
  else
  {
    // code ...
  }
}

В большинстве случаев макрос SUCCEEDED или FAILED следует использовать для проверки значенияHRESULT. Чтобы исправить это предупреждение, используйте следующий код:

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);

  if (SUCCEEDED(hr))
  {
    // code ...
  }
  else
  {
    // code ...
  }
}

Для этого предупреждения SCODE тип рассматривается как .HRESULT

Использование и free (и связанных API динамической malloc памяти) имеет множество ошибок в качестве причины утечки и исключений памяти. Чтобы избежать таких проблем с утечками и исключениями, используйте классы указателей и контейнеров, предоставляемые стандартной библиотекой C++. К ним относятся shared_ptr, unique_ptr и вектор. Дополнительные сведения см. в разделе "Смарт-указатели " и стандартной библиотеки C++.