Partager via


C6220

Mise à jour : novembre 2007

C6220

Avertissement C6220 : Cast implicite entre types d'entiers sémantiquement différents : comparaison de HRESULT à -1. Si possible, utilisez la macro SUCCEEDED ou FAILED à la place

Cet avertissement indique que HRESULT est comparé à une valeur explicite autre que HRESULT égale à -1, qui n'est pas un HRESULT de forme correcte. Un échec dans HRESULT (E_FAIL) n'est pas représenté par la valeur -1. Par conséquent, un cast implicite de HRESULT vers un entier génère une valeur incorrecte et risque d'aboutir à un résultat incorrect.

Exemple

Dans la plupart des cas, cet avertissement est provoqué par le code qui s'attend par erreur à ce qu'une fonction qui doit retourner HRESULT retourne à la place un entier, en utilisant la valeur -1 comme valeur d'échec. L'exemple de code suivant génère cet avertissement :

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (hr == -1)
  {
    // failure code ...
    return E_FAIL;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

Il est préférable d'utiliser la macro SUCCEEDED ou FAILED pour tester la valeur de HRESULT. Pour corriger cet avertissement, utilisez le code suivant :

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (FAILED(hr))
  {
    // failure code ...
    return E_FAIL;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

Pour cet avertissement, le type SCODE équivaut à HRESULT.

La comparaison explicite est appropriée pour vérifier des valeurs HRESULT spécifiques, par exemple E_FAIL. Sinon, utilisez la macro SUCCEEDED ou FAILED.

Voir aussi

Autres ressources

SUCCEEDED

FAILED