Avertissement C6221
Conversion implicite entre des types entiers sémantiquement différents : comparaison de HRESULT à un entier. Envisagez d’utiliser
SUCCEEDED
ouFAILED
de macros à la place
Cet avertissement indique qu’un HRESULT
entier est comparé à un entier autre que zéro.
Notes
Un succès dans un HRESULT
(S_OK
) est représenté par un 0. Par conséquent, un cast implicite d’un HRESULT
entier génère une valeur incorrecte et est susceptible d’entraîner un résultat incorrect. L’erreur est souvent due à l’attente erronée d’une fonction pour retourner un entier lorsqu’elle retourne réellement un HRESULT
.
Nom de l’analyse du code : COMPARING_HRESULT_TO_INT
Exemple
Le code suivant génère l’avertissement C6221 en comparant une valeur entière à une HRESULT
valeur entière :
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == 4)
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
Pour corriger cet avertissement, le code suivant utilise la FAILED
macro :
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
Pour cet avertissement, le SCODE
type est équivalent à HRESULT
.
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