Condividi tramite


Avviso C6216

Cast inserito dal compilatore tra tipi integrali diversi semanticamente: un tipo booleano a HRESULT

Un tipo booleano viene utilizzato come oggetto HRESULT senza eseguire il cast esplicito.

Osservazioni:

I tipi booleani indicano l'esito positivo in base a un valore diverso da zero; l'esito positivo (S_OK) in HRESULT è indicato da un valore pari a 0. Un valore booleano false usato come indica HRESULTS_OK, che spesso è un errore.

Nome dell'analisi del codice: COMPILER_INSERTED_CAST_BOOL_TO_HRESULT

Esempio

Il codice seguente genera questo avviso:

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

Per correggere questo avviso, aggiungere la conversione appropriata tra i due tipi o aggiungere un cast esplicito.

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

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

Per altre informazioni, vedere Macro SUCC edizione Enterprise DED e macro FAILED.