C6221
更新:2007 年 11 月
警告 C6221: 語意不相同的整數型別之間發生隱含轉型: 將 HRESULT 比作整數。請考慮改用 SUCCEEDED 或 FAILED 巨集
這個警告表示 HRESULT 是與零以外的整數進行比較。HRESULT 中的成功 (S_OK) 是以 0 表示。因此,HRESULT 至整數的隱含轉型會產生不正確的值,且可能導致錯誤的結果。發生的原因通常是錯誤地預期函式會傳回整數,但實際上卻傳回 HRESULT。
範例
下列程式碼會因為比較 HRESULT 與整數值,而產生這個警告:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == 4)
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
為了更正這個警告,下列程式碼會使用 FAILED 巨集:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
在這個警告中,SCODE 型別相當於 HRESULT。