Condividi tramite


Avviso C6214

Eseguire il cast tra tipi integer semanticamente diversi: HRESULT a un tipo booleano

Questo avviso indica che viene eseguito il cast di un oggetto HRESULT a un tipo booleano. Valore di esito positivo (S_OK) di un valore HRESULT uguale a 0. Tuttavia, 0 indica un errore per un tipo booleano. Eseguire il cast di un oggetto HRESULT in un tipo booleano e quindi usarlo in un'espressione di test genererà un risultato non corretto.

Osservazioni:

In alcuni casi, questo avviso si verifica se un HRESULT oggetto viene archiviato in una variabile booleana. Qualsiasi confronto che usa la variabile booleana per verificare l'esito HRESULT positivo o negativo potrebbe causare risultati non corretti.

Nome dell'analisi del codice: CAST_HRESULT_TO_BOOL

Esempio

Il codice seguente genera l'avviso 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;
  }
}

Per correggere questo avviso, usare il codice seguente:

#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;
  }
}

Per questo avviso, il SCODE tipo è equivalente a HRESULT.

In genere, la SUCCEEDED macro o FAILED deve essere usata per testare il valore di un oggetto HRESULT.

Per altre informazioni, vedere uno degli articoli seguenti:

SUCCEEDED

FAILED

Per usare la metodologia di allocazione di memoria C++ moderna, usare i meccanismi forniti dalla libreria standard C++ (STL). Sono inclusi shared_ptri contenitori , e , unique_ptrad esempio vector. Per altre informazioni, vedere Puntatori intelligenti e libreria standard C++.