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.
Cast implicito tra tipi integer semanticamente diversi: confronto di HRESULT con un numero intero. Valutare invece l'uso di
SUCCEEDEDmacro oFAILED
Osservazioni:
Questo avviso indica che un oggetto HRESULT viene confrontato con un numero intero diverso da zero.
Un esito positivo in un oggetto HRESULT (S_OK) è rappresentato da un valore 0. Di conseguenza, un cast implicito di un HRESULT oggetto a un numero intero genera un valore non corretto e probabilmente genera un risultato errato. L'errore è spesso causato dall'aspettarsi erroneamente che una funzione restituisca un intero quando restituisce effettivamente un oggetto HRESULT.
Nome dell'analisi del codice: COMPARING_HRESULT_TO_INT
Esempio
Il codice seguente genera l'avviso C6221 confrontando un oggetto HRESULT con un valore intero:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == 4)
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
Per correggere l'avviso, nel codice seguente viene utilizzata la FAILED macro :
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
Per questo avviso, il SCODE tipo è equivalente a HRESULT.
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_ptri contenitori , e , unique_ptrad esempio vector. Per altre informazioni, vedere Puntatori intelligenti e libreria standard C++.