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.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de