警告 C6219

語意上不同整數類型之間的隱含轉換:比較 HRESULT 與 1 或 TRUE。 請考慮改用 SUCCEEDEDFAILED 巨集

備註

此警告表示 HRESULT 正在與一個 (1) 的明確非HRESULT 值進行比較。 這項比較可能會導致不正確的結果,因為 (S_OK) 的典型成功值為 HRESULT 0。 如果您比較這個值與布林型別,則會隱含地轉換成 false

程式碼分析名稱:COMPARING_HRESULT_TO_ONE

範例

下列程式代碼會產生此警告,因為 CoGetMalloc 會傳回 HRESULT,然後會與 比較 TRUE

#include <windows.h>

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

  if (hr == TRUE)
  {
    // success code ...
  }
  else
  {
    // failure code
  }
}

大部分時候,此警告是由比較 HRESULT 與布爾值的程式代碼所造成。 最好使用 SUCCEEDEDFAILED 巨集來測試的值 HRESULT。 若要更正此警告,請使用下列程序代碼:

#include <windows.h>

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

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

針對這個警告,類型 SCODEHRESULT被視為 。

使用 mallocfree (和相關易失記憶體 API) 有許多陷阱,因為記憶體流失和例外狀況。 若要避免這類洩漏和例外狀況問題,請使用 C++ 標準連結庫所提供的指標和容器類別。 其中包括 shared_ptrunique_ptr向量。 如需詳細資訊,請參閱 智慧型指標C++標準連結庫