Avviso C6217
Cast implicito tra tipi integer semanticamente diversi: test HRESULT con 'not'. È consigliabile usare
SUCCEEDED
oFAILED
macro.
Osservazioni:
Questo avviso indica che il codice testa un oggetto HRESULT
con l'operatore logical-not (!
). Il valore 0 (il valore definito per S_OK
) indica l'esito positivo in un oggetto HRESULT
. Tuttavia, 0 indica anche un errore per un tipo booleano. Se si testa un oggetto HRESULT
con l'operatore logical-not (!
) per determinare il blocco di codice da eseguire, può causare un comportamento errato o codice che confonde i gestori futuri.
Per verificare se un oggetto HRESULT
ha esito positivo o negativo, utilizzare invece le SUCCEEDED
macro o FAILED
.
Questo avviso funziona sia per i HRESULT
tipi che SCODE
per i tipi .
Nome dell'analisi del codice: TESTING_HRESULT_WITH_NOT
Esempio
Il codice seguente genera questo avviso perché usa l'operatore logical-not (!
) per determinare l'esito positivo o negativo di un HRESULT
valore. In questo caso, il codice esegue il percorso di codice errato perché un HRESULT
valore pari a 0 indica l'esito positivo, quindi ( !hr )
esegue erroneamente il codice di errore:
#include <windows.h>
#include <objbase.h>
void f( )
{
HRESULT hr = CoInitialize(NULL);
if (!hr)
{
// failure code ...
}
else
{
// success code ...
}
}
Per correggere questo avviso, il codice seguente usa una FAILED
macro per verificare la presenza di errori:
#include <windows.h>
#include <objbase.h>
void f( )
{
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
// failure code ...
}
else
{
// success code ...
}
}
Vedi anche
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