Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
avviso C6220: Cast implicito tra tipi integer semanticamente diversi: confronto di HRESULT con -1 in corso.Si consiglia l'utilizzo della macro SUCCEEDED o FAILED
L'avviso indica che è in corso un confronto tra HRESULT e un valore -1 esplicito diverso da HRESULT, ovvero un HRESULT non ben formato.Un errore in HRESULT (E_FAIL) non è rappresentato da un -1.Pertanto, un cast implicito di un HRESULT a un Integer genera un valore errato e probabilmente produce il risultato non corretto.
Esempio
Nella maggior parte dei casi, l'avviso è causato dal codice, che prevede erroneamente che una funzione che dovrebbe restituire un HRESULT restituisca invece un numero intero, utilizzando -1 come valore per l'esito negativo.L'esempio di codice riportato di seguito 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 utilizzare le macro SUCCEEDED o FAILED per eseguire il test del valore di un tipo HRESULT.Per risolvere il problema, utilizzare 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;
}
}
Ai fini del presente avviso, il tipo SCODE equivale a HRESULT.
Il confronto esplicito è adatto per verificare valori HRESULT specifici, ad esempio E_FAIL.In alternativa, utilizzare la macro SUCCEEDED o FAILED.
Per ulteriori informazioni, vedere Macro SUCCEEDED e Macro FAILED.
Si noti che l'utilizzo di malloc e free (e delle API relative all'allocazione di memoria dinamica) ha molti problemi in termini di perdite di memoria ed eccezioni.Per evitare interamente questi tipi di problemi di perdite ed eccezioni, utilizzare i meccanismi forniti dalla libreria STL (Standard Template Library) di C++.Questi comprendono shared_ptr, unique_ptr e vector.Per ulteriori informazioni, vedere Puntatori intelligenti (C++ moderno) e Riferimento per la libreria standard C++.