警告 C6220
意味的に異なる整数型間の暗黙的なキャスト: HRESULT と -1 の比較。 代わりに使用または
FAILED
マクロを使用SUCCEEDED
することを検討してください
この警告は、明示的な -1 以外HRESULT
の値 (整形式HRESULT
ではない) と比較されていることを示HRESULT
します。
解説
(E_FAIL
) のHRESULT
エラーは -1 では表されません。 したがって、整数への HRESULT
の暗黙的なキャストにより、不適切な値が生成されて、不正な結果が得られる可能性があります。
コード分析名: COMPARING_HRESULT_TO_MINUS_ONE
例
ほとんどの場合、警告 C6220 は、関数が誤って整数を返し、エラー値として -1 を使用するが、代わりに関数から .HRESULT
この警告が発生するコード例を次に示します。
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == -1)
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
またはFAILED
マクロを使用SUCCEEDED
して、.の値HRESULT
をテストすることをお勧めします。 この警告を解決するには、次のコードを使用します。
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
この警告では、SCODE
型は HRESULT
と等価です。
明示的な比較は、HRESULT
など特定の E_FAIL
値をチェックする場合に適しています。 そうでない場合は SUCCEEDED
マクロまたは FAILED
マクロを使います。
詳細については、「マクロとFAILED
マクロ」を参照してくださいSUCCEEDED
。
(およびfree
関連する動的メモリ割り当て API) の使用malloc
には、メモリ リークと例外に関して多くの落とし穴があります。 このような潜在的なリークを完全に回避するには、C++ 標準ライブラリ (STL) によって提供されるメカニズムを使用します。 これらには、次unique_ptr
のようなvector
コンテナーが含まれますshared_ptr
。 詳細については、「スマート ポインター」および「C++ 標準ライブラリ」を参照してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示