警告 C6216
意味的に異なる整数型の間にコンパイラによって挿入されたキャスト: HRESULT へのブール型
ブール型は、明示的にキャストされることなく HRESULT
として使用されています。
解説
ブール型は 0 以外の値で成功を示します。S_OK
の成功値 (HRESULT
) は値 0 によって示されます。 ブール false
値として HRESULT
使用される場合は、間違いが多いことを示します S_OK
。
コード分析名: COMPILER_INSERTED_CAST_BOOL_TO_HRESULT
例
この警告が発生するコード例を次に示します。
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
HRESULT f( REFGUID riid1, REFGUID riid2 )
{
// Oops, f() should return S_OK when the values are equal but will
// return E_FAIL instead because IsEqual returns a c-style boolean values TRUE or FALSE
return IsEqual(riid1, riid2);
}
この警告を解決するには、2 つの型の間に適切な変換を追加するか、明示的なキャストを追加します。
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
HRESULT f( REFGUID riid1, REFGUID riid2 )
{
// converting because IsEqual returns a c-style TRUE or FALSE
return IsEqual(riid1, riid2) ? S_OK : E_FAIL;
}
この警告では、SCODE
型は HRESULT
と等価です。
詳細については、「SUCCEEDED Macro (SUCCEEDED マクロ)」および「FAILED Macro (FAILED マクロ)」を参照してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示