次の方法で共有


警告 C6217

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

解説

この警告は、コードが論理非 (!) 演算子を使用してHRESULTテストすることを示します。 値 0 (定義 S_OKされている値) HRESULTは、. ただし、0 はブール型の失敗も示します。 論理非演算子 (!) をHRESULTテストして実行するコード ブロックを特定すると、将来のメインコンテナーを混乱させる不適切な動作やコードが発生する可能性があります。

成功か失敗かをHRESULT確認するには、代わりに or FAILED マクロをSUCCEEDED使用します。

この警告は、両方 HRESULT の型に対して SCODE 機能します。

コード分析名: TESTING_HRESULT_WITH_NOT

次のコードでは、論理非 (!) 演算子を使用して値の成功または失敗を判断するため、この警告が HRESULT 生成されます。 この場合、0 が成功を示しているため HRESULT 、コードで間違ったコード パスが実行されるため、エラー コードが正しく実行されません ( !hr )

#include <windows.h>
#include <objbase.h>

void f( )
{
  HRESULT hr = CoInitialize(NULL);
  if (!hr)
  {
    // failure code ...
  }
  else
  {
    // success code ...
  }
}

この警告を修正するために、次のコードではマクロをFAILED使用してエラーをチェックします。

#include <windows.h>
#include <objbase.h>

void f( )
{
  HRESULT hr = CoInitialize(NULL);
  if (FAILED(hr))
  {
    // failure code ...
  }
  else
  {
    // success code ...
  }
}

関連項目

SUCCEEDED マクロ
FAILED マクロ