Поделиться через


Предупреждение C26863

Возвращаемое значение из функции func обработки даты и времени игнорируется

Это правило было добавлено в Visual Studio 2022 17.8.

Замечания

Важно проверить возвращаемое значение функции, которая преобразует структуру дат, когда аргумент ввода даты года, месяца или даты был манипулирован без надлежащей обработки високосного года. В противном случае функция может завершиться ошибкой и выполнение продолжается с выходным параметром, содержащим недопустимые данные.

Ниже приведен список функций, которые рассматриваются в этом предупреждении:

Имя анализа кода: 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++ правил для выполнения".

См. также

C6393
C6394
C26861
C26862
C26864