Aviso C6214
Converter entre tipos inteiros semanticamente diferentes: HRESULT para um tipo booleano
Este aviso indica que um HRESULT
está sendo convertido em um tipo booliano. O valor de êxito (S_OK
) de um HRESULT
é igual a 0. No entanto, 0 indica falha para um tipo booliano. A conversão de um HRESULT
em um tipo booliano e, em seguida, usá-lo em uma expressão de teste produzirá um resultado incorreto.
Comentários
Às vezes, esse aviso ocorre se um HRESULT
estiver sendo armazenado em uma variável booliana. Qualquer comparação que use a variável booliana para testar sucesso ou a falha do HRESULT
poderá levar a resultados incorretos.
Nome da análise de código: CAST_HRESULT_TO_BOOL
Exemplo
O código a seguir gera o aviso C6214:
#include <windows.h>
BOOL f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if ((BOOL)hr) // warning C6214
{
// success code ...
return TRUE;
}
else
{
// failure code ...
return FALSE;
}
}
Para corrigir esse aviso, use o seguinte código:
#include <windows.h>
BOOL f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// success code ...
return TRUE;
}
else
{
// failure code ...
return FALSE;
}
}
Para este aviso, o tipo SCODE
é equivalente a HRESULT
.
Normalmente, a macro SUCCEEDED
ou FAILED
deve ser usada para testar o valor de um HRESULT
.
Para obter mais informações, consulte um dos seguintes artigos:
Para fazer uso da metodologia moderna de alocação de memória C++, use os mecanismos fornecidos pela STL (Biblioteca Padrão do C++). Isso inclui shared_ptr
, unique_ptr
e contêineres como vector
. Para obter mais informações, confira Ponteiros inteligentes e Biblioteca Padrão do C++.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de