Compartir a través de


Advertencia C6216

Conversión insertada por el compilador entre tipos enteros semánticamente diferentes: un tipo booleano a HRESULT

Se usa un tipo booleano como un valor HRESULT sin convertirlo explícitamente.

Comentarios

Los tipos booleanos indican una operación correcta mediante un valor distinto de cero; la operación correcta (S_OK) en HRESULT se indica mediante un valor de 0. Un valor booleano false usado como HRESULT indicaría S_OK, que suele ser un error.

Nombre del análisis de código: COMPILER_INSERTED_CAST_BOOL_TO_HRESULT

Ejemplo

El código siguiente genera esta advertencia:

#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);
}

Para corregir esta advertencia, agregue la conversión adecuada entre los dos tipos o agregue una conversión explícita.

#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;
}

Para esta advertencia, el tipo SCODE es equivalente a HRESULT.

Para más información, consulte los temas Macro SUCCEEDED y Macro FAILED.