Avviso C6220
Cast implicito tra tipi integer semanticamente diversi: confronto tra HRESULT e -1. Prendere in considerazione l'uso
SUCCEEDED
oFAILED
la macro
Questo avviso indica che un oggetto HRESULT
viene confrontato con un valore esplicito eHRESULT
diverso da -1, che non è un formato corretto HRESULT
.
Osservazioni:
Un errore in HRESULT
(E_FAIL
) non è rappresentato da -1. Pertanto, un cast implicito di un HRESULT
oggetto a un numero intero genererà un valore non corretto e potrebbe causare un risultato errato.
Nome dell'analisi del codice: COMPARING_HRESULT_TO_MINUS_ONE
Esempio
Nella maggior parte dei casi, l'avviso C6220 è causato dal codice che prevede erroneamente che una funzione restituisca un numero intero e di usare -1 come valore di errore, ma la funzione restituisce invece un oggetto HRESULT
. L'esempio di codice seguente genera questo avviso:
#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;
}
}
È consigliabile usare la SUCCEEDED
macro o FAILED
per testare il valore di un oggetto HRESULT
. Per correggere questo avviso, usare il codice seguente:
#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;
}
}
Per questo avviso, il SCODE
tipo è equivalente a HRESULT
.
Il confronto esplicito è appropriato per verificare la presenza di valori specificiHRESULT
, ad esempio . E_FAIL
In caso contrario, utilizzare le SUCCEEDED
macro o FAILED
.
Per altre informazioni, vedere SUCCEEDED
Macro e FAILED
macro.
L'uso di malloc
e free
(e relative API di allocazione dinamica della memoria) presenta molti problemi in termini di perdite di memoria ed eccezioni. Per evitare completamente questi tipi di potenziali perdite, usare i meccanismi forniti dalla libreria standard C++ (STL). Sono inclusi shared_ptr
i contenitori , e , unique_ptr
ad esempio vector
. Per altre informazioni, vedere Puntatori intelligenti e libreria standard C++.