Advertencia C6215
Conversión entre tipos enteros semánticamente diferentes: un tipo booleano a HRESULT
Esta advertencia indica que se va a convertir un valor booleano en HRESULT
. Los tipos booleanos indican una operación correcta mediante un valor distinto de cero; mientras que la operación correcta (S_OK
) en HRESULT
se indica mediante un valor de 0. Convertir un tipo booleano en un valor HRESULT
y usarlo luego en una expresión de prueba da lugar a un resultado incorrecto.
Comentarios
Esta advertencia se produce con frecuencia cuando se usa un valor booleano como argumento para una macro SUCCEEDED
o FAILED
, que convierte explícitamente sus argumentos en un valor HRESULT
.
Nombre del análisis de código: CAST_BOOL_TO_HRESULT
Ejemplo
El código siguiente genera esta advertencia:
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
void f( REFGUID riid1, REFGUID riid2 )
{
if (SUCCEEDED( IsEqual( riid1, riid2 ) )) //warning C6215
{
// success code ...
}
else
{
// failure code ...
}
}
Por lo general, las macros SUCCEEDED
o FAILED
solo se deben aplicar a HRESULT
.
Para corregir esta advertencia, utilice el código siguiente:
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
void f( REFGUID riid1, REFGUID riid2 )
{
if (IsEqual( riid1, riid2 ) == TRUE)
{
// code for riid1 == riid2
}
else
{
// code for riid1 != riid2
}
}
Para más información, consulte 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