Avertissement C6216
Cast inséré par le compilateur entre des types intégraux sémantiquement différents : un type booléen en HRESULT
Un type booléen est utilisé comme un HRESULT
cast explicite.
Notes
Les types booléens indiquent la réussite par une valeur non nulle ; réussite (S_OK
) dans HRESULT
est indiqué par une valeur de 0. Valeur booléenne false
utilisée comme HRESULT
une indication S_OK
, qui est fréquemment une erreur.
Nom de l’analyse du code : COMPILER_INSERTED_CAST_BOOL_TO_HRESULT
Exemple
Le code suivant génère cet avertissement :
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
HRESULT f( REFGUID riid1, REFGUID riid2 )
{
// Oops, f() should return S_OK when the values are equal but will
// return E_FAIL instead because IsEqual returns a c-style boolean values TRUE or FALSE
return IsEqual(riid1, riid2);
}
Pour corriger cet avertissement, ajoutez la conversion appropriée entre les deux types ou ajoutez un cast explicite.
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
HRESULT f( REFGUID riid1, REFGUID riid2 )
{
// converting because IsEqual returns a c-style TRUE or FALSE
return IsEqual(riid1, riid2) ? S_OK : E_FAIL;
}
Pour cet avertissement, le SCODE
type est équivalent à HRESULT
.
Pour plus d’informations, consultez la macro SUCCEEDED et la macro FAILED.
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