警告 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 ...
}
}
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示