Предупреждение C6230
Неявное приведение между семантически разными типами целых чисел: использование HRESULT в логическом контексте
Замечания
Это предупреждение указывает, что в HRESULT
контексте, в котором ожидается логический результат, например if
оператор. Этот тест, скорее всего, даст неверные результаты. Например, обычное значение успешного выполнения для HRESULT
(S_OK
) равно false, если оно проверяется как логическое значение.
Имя анализа кода: USING_HRESULT_IN_BOOLEAN_CONTEXT
Пример
Следующий код создает это предупреждение:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (hr)
{
// code ...
}
else
{
// code ...
}
}
В большинстве случаев макрос SUCCEEDED или FAILED следует использовать для проверки значенияHRESULT
. Чтобы исправить это предупреждение, используйте следующий код:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// code ...
}
else
{
// code ...
}
}
Для этого предупреждения SCODE
тип рассматривается как .HRESULT
Использование и free
(и связанных API динамической malloc
памяти) имеет множество ошибок в качестве причины утечки и исключений памяти. Чтобы избежать таких проблем с утечками и исключениями, используйте классы указателей и контейнеров, предоставляемые стандартной библиотекой C++. К ним относятся shared_ptr, unique_ptr и вектор. Дополнительные сведения см. в разделе "Смарт-указатели " и стандартной библиотеки C++.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по