Avertissement C6215
Effectuer un cast entre des types entiers sémantiquement différents : un type booléen en HRESULT
Cet avertissement indique qu’un booléen est converti en un HRESULT
. Les types booléens indiquent la réussite par une valeur non nulle, tandis que le succès (S_OK
) dans HRESULT
est indiqué par la valeur 0. La conversion d’un type booléen sur un HRESULT
type booléen, puis son utilisation dans une expression de test génère un résultat incorrect.
Notes
Cet avertissement se produit fréquemment lorsqu’un booléen est utilisé comme argument vers SUCCEEDED
ou FAILED
macro, qui convertit explicitement leurs arguments en un HRESULT
.
Nom de l’analyse du code : CAST_BOOL_TO_HRESULT
Exemple
Le code suivant génère cet avertissement :
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
void f( REFGUID riid1, REFGUID riid2 )
{
if (SUCCEEDED( IsEqual( riid1, riid2 ) )) //warning C6215
{
// success code ...
}
else
{
// failure code ...
}
}
En règle générale, les SUCCEEDED
FAILED
macros ne doivent être appliquées qu’à HRESULT
.
Pour corriger cet avertissement, utilisez le code suivant :
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
void f( REFGUID riid1, REFGUID riid2 )
{
if (IsEqual( riid1, riid2 ) == TRUE)
{
// code for riid1 == riid2
}
else
{
// code for riid1 != riid2
}
}
Pour plus d’informations, consultez la macro SUCCEEDED et la macro FAILED