語意上不同整數類型之間的隱含轉換:比較 HRESULT 與 1 或 TRUE。 請考慮改用
SUCCEEDED或FAILED巨集
備註
此警告表示 HRESULT 正在與一個 (1) 的明確非HRESULT 值進行比較。 這項比較可能會導致不正確的結果,因為 (S_OK) 的典型成功值為 HRESULT 0。 如果您比較這個值與布林型別,則會隱含地轉換成 false。
程式碼分析名稱:COMPARING_HRESULT_TO_ONE
範例
下列程式代碼會產生此警告,因為 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被視為 。
使用 malloc 和 free (和相關易失記憶體 API) 有許多陷阱,因為記憶體流失和例外狀況。 若要避免這類洩漏和例外狀況問題,請使用 C++ 標準連結庫所提供的指標和容器類別。 其中包括 shared_ptr、 unique_ptr和 向量。 如需詳細資訊,請參閱 智慧型指標 和 C++標準連結庫。