次の方法で共有


警告 C6221

意味的に異なる整数型間の暗黙的なキャスト: HRESULT と整数の比較。 代わりに SUCCEEDED または FAILED マクロを使用することを検討してください

解説

この警告は、HRESULT が 0 以外の整数と比較されていることを示します。

HRESULT (S_OK) での成功は、0 で表されます。 そのため、 HRESULT を整数に暗黙的にキャストすると、正しくない値が生成され、誤った結果が発生する可能性があります。 このエラーは、関数が実際に HRESULTを返すときに整数を誤って返すことが原因で発生することがよくあります。

コード分析名: COMPARING_HRESULT_TO_INT

次のコードでは、 HRESULT を整数値と比較することで、警告 C6221 が生成されます。

#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 と等価です。

詳細については、「マクロ SUCCEEDED マクロ マクロと FAILED マクロを参照してください。

mallocfree (および関連する動的メモリ割り当て API) の使用には、メモリ リークと例外に関して多くの落とし穴があります。 このような潜在的なリークを完全に回避するには、C++ 標準ライブラリ (STL) によって提供されるメカニズムを使用します。 これには、 shared_ptrunique_ptrvectorなどのコンテナーが含まれます。 詳細については、「スマート ポインター」および「C++ 標準ライブラリ」を参照してください。