Partager via


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 :

SUCCEEDED

FAILED

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_ptret des conteneurs tels que vector. Pour plus d’informations, consultez Les pointeurs intelligents et la bibliothèque standard C++.