Предупреждение C6214
Приведение между семантически разными целыми типами: HRESULT к логическому типу
Это предупреждение указывает на то, что HRESULT
логическое значение приведения к логическому типу. Значение успешного HRESULT
выполнения (S_OK
) равно 0. Однако 0 указывает на сбой логического типа. HRESULT
Приведение к логическому типу, а затем использование его в тестовом выражении приведет к неправильному результату.
Замечания
Иногда это предупреждение возникает HRESULT
при хранении в логическое значение переменной. Любое сравнение, использующее логическое значение переменной для HRESULT
проверки успешности или сбоя, может привести к неправильным результатам.
Имя анализа кода: CAST_HRESULT_TO_BOOL
Пример
Следующий код создает предупреждение 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;
}
}
Чтобы исправить это предупреждение, используйте следующий код:
#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;
}
}
Для этого предупреждения SCODE
тип эквивалентен HRESULT
.
SUCCEEDED
Обычно для проверки значения HRESULT
значения следует использовать макрос или FAILED
макрос.
Дополнительные сведения см. в следующих статьях:
Чтобы использовать современную методологию выделения памяти C++, используйте механизмы, предоставляемые стандартной библиотекой C++ (STL). К ним относятся, например, unique_ptr
и контейнеры, такие как.shared_ptr
vector
Дополнительные сведения см. в разделе "Смарт-указатели " и "Стандартная библиотека C++".
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по