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。