C6219

更新:2007 年 11 月

警告 C6219:语义不同的整数类型之间的隐式强制转换: 将 HRESULT 与 1 或 TRUE 进行比较。应考虑改用 SUCCEEDED 或 FAILED 宏

此警告意味着将 HRESULT 与显式的非 HRESULT 值 1 进行比较。因为 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。通常,最好使用 SUCCEEDED 或 FAILED 宏来测试 HRESULT 的值。若要更正此警告,请使用下面的代码:

#include <windows.h>

void f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  
  if (SUCCEEDED(hr))
  {
    // success code ...
  }
  else
  {
    // failure code   
  }
}

对于此警告,SCODE 类型等效于 HRESULT。

请参见

其他资源

SUCCEEDED

FAILED