Avertissement C6220
Conversion implicite entre des types entiers sémantiquement différents : comparaison de HRESULT à -1. Envisagez d’utiliser
SUCCEEDED
ouFAILED
de macro à la place
Cet avertissement indique qu’un HRESULT
élément est comparé à une valeur explicite, non-1HRESULT
, qui n’est pas une valeur bien formée HRESULT
.
Notes
Un échec dans HRESULT
(E_FAIL
) n’est pas représenté par un -1. Par conséquent, un cast implicite d’un HRESULT
entier génère une valeur incorrecte et risque d’entraîner un résultat incorrect.
Nom de l’analyse du code : COMPARING_HRESULT_TO_MINUS_ONE
Exemple
Dans la plupart des cas, l’avertissement C6220 est dû au code qui s’attend à ce qu’une fonction retourne un entier et utilise -1 comme valeur d’échec, mais à la place, la fonction retourne un HRESULT
. L’exemple de code suivant génère cet avertissement :
#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;
}
}
Il est préférable d’utiliser le ou FAILED
la SUCCEEDED
macro pour tester la valeur d’un HRESULT
. Pour corriger cet avertissement, utilisez le code suivant :
#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;
}
}
Pour cet avertissement, le SCODE
type est équivalent à HRESULT
.
La comparaison explicite est appropriée pour case activée pour des valeurs spécifiquesHRESULT
, telles que E_FAIL
. Sinon, utilisez les macros ou FAILED
les SUCCEEDED
macros.
Pour plus d’informations, consultez Macro et FAILED
Macro.SUCCEEDED
L’utilisation et free
les API d’allocation de mémoire dynamique associées ont de nombreux pièges en termes de malloc
fuites de mémoire et d’exceptions. Pour éviter ces types de fuites potentielles, utilisez les mécanismes fournis par la bibliothèque C++ Standard (STL). Ceux-ci incluent shared_ptr
, unique_ptr
et des conteneurs tels que vector
. Pour plus d’informations, consultez Les pointeurs intelligents et la bibliothèque standard C++.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour