Avertissement C6214
Effectuer un cast entre des types entiers sémantiquement différents : HRESULT en type booléen
Cet avertissement indique qu’un HRESULT
cast est en cours de conversion en type booléen. Valeur de réussite (S_OK
) d’un HRESULT
égal à 0. Toutefois, 0 indique l’échec d’un type booléen. Le cast d’un HRESULT
type booléen, puis son utilisation dans une expression de test génère un résultat incorrect.
Notes
Parfois, cet avertissement se produit si un HRESULT
élément est stocké dans une variable booléenne. Toute comparaison qui utilise la variable booléenne pour tester HRESULT
la réussite ou l’échec peut entraîner des résultats incorrects.
Nom de l’analyse du code : CAST_HRESULT_TO_BOOL
Exemple
Le code suivant génère l’avertissement C6214 :
#include <windows.h>
BOOL f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if ((BOOL)hr) // warning C6214
{
// success code ...
return TRUE;
}
else
{
// failure code ...
return FALSE;
}
}
Pour corriger cet avertissement, utilisez le code suivant :
#include <windows.h>
BOOL f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// success code ...
return TRUE;
}
else
{
// failure code ...
return FALSE;
}
}
Pour cet avertissement, le SCODE
type est équivalent à HRESULT
.
En règle générale, la SUCCEEDED
macro FAILED
doit être utilisée pour tester la valeur d’un HRESULT
.
Pour plus d’informations, consultez l’un des articles suivants :
Pour utiliser la méthodologie d’allocation de mémoire C++ moderne, utilisez les mécanismes fournis par la bibliothèque standard C++ (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