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 HRESULT
S_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.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per