語意上不同整數類型之間的隱含轉換:在布爾值內容中使用 HRESULT
備註
此警告指出,在預期布爾值結果的內容中使用裸機 HRESULT ,例如 if 語句。 這項測試可能會產生不正確的結果。 例如,當其測試為布爾值時,(S_OK) 的一般成功值HRESULT為 false。
程式碼分析名稱:USING_HRESULT_IN_BOOLEAN_CONTEXT
範例
下列程式代碼會產生此警告:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (hr)
{
// code ...
}
else
{
// code ...
}
}
在大部分情況下, 應該使用 SUCCEEDED 或 FAILED 巨集來測試的值 HRESULT。 若要更正此警告,請使用下列程序代碼:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// code ...
}
else
{
// code ...
}
}
針對這個警告,類型 SCODE 會 HRESULT被視為 。
使用 malloc 和 free (和相關易失記憶體 API) 有許多陷阱,因為記憶體流失和例外狀況。 若要避免這類洩漏和例外狀況問題,請使用 C++ 標準連結庫所提供的指標和容器類別。 其中包括 shared_ptr、 unique_ptr和 向量。 如需詳細資訊,請參閱 智慧型指標 和 C++標準連結庫。