警告 C6230
意味的に異なる整数型間の暗黙的なキャスト: ブール型コンテキストでの HRESULT の使用
解説
この警告は、HRESULT
が、それのみで if
ステートメントなど、ブール型の結果が予測されるコンテキストで使用されていることを示します。 このテストでは、正しい結果が得られない可能性があります。 たとえば、HRESULT
の通常の成功値 (S_OK
) は、ブール型としてテストされた場合は失敗を意味します。
コード分析名: 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、vector などがあります。 詳細については、「スマート ポインター」および「C++ 標準ライブラリ」を参照してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示