C6219
警告 C6219: 語意不相同的整數型別之間發生隱含轉型: 將 HRESULT 比作 1 或 TRUE。請考慮改用 SUCCEEDED 或 FAILED 巨集
這項警告表示 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 所造成。通常最好是使用 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。