共用方式為


C6220

警告 C6220 - 在語意不相同的整數型別之間發生不當隱含轉型: 將 HRESULT 比作 -1。考慮改用 SUCCEEDED 或 FAILED 巨集

這項警告表示 HRESULT 會與明確且非 HRESULT 的值 -1 進行比較,這並不是語式正確的 (Well-Formed) HRESULT。HRESULT (E_FAIL) 中的失敗不是以 -1 表示。因此,HRESULT 至整數的隱含轉型會產生不正確的值,而且可能導致錯誤的結果。

範例

在大部分的情況下,這項警告是由於程式碼錯誤地預期函式應該會傳回 HRESULT 而非傳回整數所造成的,它是以 -1 為錯誤值。下列程式碼範例會產生這項警告:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (hr == -1)
  {
    // failure code ...
    return E_FAIL;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

最好是使用 SUCCEEDED 或 FAILED 巨集來測試 HRESULT 的值。若要更正這則警告,請使用下列程式碼:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (FAILED(hr))
  {
    // failure code ...
    return E_FAIL;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

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

明確比較適合於檢查特定的 HRESULT 值,例如 E_FAIL。否則,請使用 SUCCEEDED 或 FAILED 巨集。

如需詳細資訊,請參閱 SUCCEEDED 巨集 (英文) 和 FAILED 巨集 (英文)。