共用方式為


警告 C6230

語意上不同整數類型之間的隱含轉換:在布爾值內容中使用 HRESULT

備註

此警告指出,在預期布爾值結果的內容中使用裸機 HRESULT ,例如 if 語句。 這項測試可能會產生不正確的結果。 例如,當其測試為布爾值時,(S_OK) 的一般成功值HRESULT為 false。

程式碼分析名稱:USING_HRESULT_IN_BOOLEAN_CONTEXT

範例

下列程式代碼會產生此警告:

#include <windows.h>

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

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

在大部分情況下, 應該使用 SUCCEEDEDFAILED 巨集來測試的值 HRESULT。 若要更正此警告,請使用下列程序代碼:

#include <windows.h>

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

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

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

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