Advertencia C6220
Conversión implícita entre tipos enteros semánticamente diferentes: comparando HRESULT con -1. Considere la posibilidad de usar
SUCCEEDED
oFAILED
macro en su lugar
Esta advertencia indica que se HRESULT
está comparando con un valor explícito queHRESULT
no es -1, que no es un correcto.HRESULT
Comentarios
Un error en HRESULT
(E_FAIL
) no está representado por un -1. Por consiguiente, la conversión implícita de un HRESULT
en un entero generará un valor incorrecto y, con toda probabilidad, dará lugar a un resultado incorrecto.
Nombre del análisis de código: COMPARING_HRESULT_TO_MINUS_ONE
Ejemplo
En la mayoría de los casos, la advertencia C6220 se debe al código que espera erróneamente que una función devuelva un entero y usar -1 como valor de error, pero en su lugar la función devuelve un HRESULT
. El siguiente ejemplo de código genera esta advertencia:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == -1)
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
Es mejor usar la SUCCEEDED
macro o FAILED
para probar el valor de .HRESULT
Para corregir esta advertencia, utilice el código siguiente:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
Para esta advertencia, el tipo SCODE
es equivalente a HRESULT
.
La comparación explícita es adecuada para comprobar determinados valores de HRESULT
, como E_FAIL
. De lo contrario, use las macros SUCCEEDED
o FAILED
.
Para obtener más información, vea SUCCEEDED
Macro y FAILED
Macro.
El uso de malloc
y free
(y las API de asignación dinámica de memoria relacionadas) tiene muchos problemas en términos de pérdidas de memoria y excepciones. Para evitar estos tipos de posibles fugas por completo, use los mecanismos proporcionados por la biblioteca estándar de C++ (STL). Entre ellos se incluyen shared_ptr
los contenedores , unique_ptr
y , como vector
. Para más información, consulte los artículos sobre punteros inteligentes y la biblioteca estándar de C++.
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