Предупреждение C26863
Возвращаемое значение из функции
func
обработки даты и времени игнорируется
Это правило было добавлено в Visual Studio 2022 17.8.
Замечания
Важно проверить возвращаемое значение функции, которая преобразует структуру дат, когда аргумент ввода даты года, месяца или даты был манипулирован без надлежащей обработки високосного года. В противном случае функция может завершиться ошибкой и выполнение продолжается с выходным параметром, содержащим недопустимые данные.
Ниже приведен список функций, которые рассматриваются в этом предупреждении:
FileTimeToSystemTime
SystemTimeToFileTime
SystemTimeToTzSpecificLocalTime
SystemTimeToTzSpecificLocalTimeEx
TzSpecificLocalTimeToSystemTime
TzSpecificLocalTimeToSystemTimeEx
RtlLocalTimeToSystemTime
RtlTimeToSecondsSince1970
Имя анализа кода: DATETIME_MANIPULATION_FUNCTION_RETURN_IGNORED
Пример
Следующий код пытается получить текущее системное время, перейти в поле месяца на один месяц и получить время файла, соответствующее обновленному системного времени с помощью SystemTimeToFileTime
. Однако может завершиться ошибкой, SystemTimeToFileTime
так как обновленное системное время может стать недействительным:
#include <Windows.h>
void foo()
{
FILETIME ft;
SYSTEMTIME st;
GetSystemTime(&st);
st.wMonth++; // Advance month by one
// Get the file time
SystemTimeToFileTime(&st, &ft); // C26863
}
Чтобы устранить проблему, всегда проверяйте возвращаемое значение из функций обработки даты и времени и соответствующим образом обрабатывайте сбои:
#include <Windows.h>
void foo()
{
FILETIME ft;
SYSTEMTIME st;
GetSystemTime(&st);
st.wMonth++; // Advance month by one
// Get file time
if (SystemTimeToFileTime(&st, &ft))
{
// Use file time
}
}
Эвристика
Это правило распознает только структуру Windows SYSTEMTIME
и структуру C tm
.
Это правило применяется независимо от того, были ли проверены входные аргументы перед вызовом этих функций. Если перед вызовом функции проверяются все входные аргументы, это правило может сообщить о ложном предупреждении.
Это правило является правилом согласия, т. е. анализ кода должен использовать файл набора правил, и правило должно быть явно включено в файл набора правил и включено для его применения. Дополнительные сведения о создании пользовательского набора правил для анализа кода см. в разделе "Использование наборов правил для указания C++
правил для выполнения".