建議使用 Visual Studio 2017

C6219

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

警告 C6219: 語意不相同的整數型別之間發生隱含轉型: 將 HRESULT 比作 1 或 TRUE。 考慮改用 SUCCEEDEDFAILED 巨集

這項警告表示 HRESULT 是與一 (1) 的明確且非 HRESULT 值比較。 這可能會導致不正確的結果,因為 HRESULT (S_OK) 的典型成功值為 0,將它與布林型別比較,會將其隱含地轉換為 false。

下列程式碼會產生這項警告,因為 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     
  }  
}  

在這個警告中,SCODE 型別相當於 HRESULT

請注意使用 malloc 和 free (及相關的動態配置應用程式開發介面) 根據記憶體遺漏和例外狀況有許多意外。 若要避免這類遺漏和例外狀況的問題,請使用 C++ Standard Template Library (STL) 提供的機制。 其中包括 shared_ptrunique_ptrvector。 如需詳細資訊,請參閱智慧型指標C++ Standard Library

顯示: