警告 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 结构。

无论在调用这些函数之前是否验证了输入参数,都会强制实施此规则。 如果在调用函数之前验证了所有输入参数,则此规则可以报告 false 警告。

此规则属于选择加入规则,这意味着代码分析应使用规则集文件,并且规则应显式包含在规则集文件中,并应为其启用以便应用。 有关为代码分析创建自定义规则集的详细信息,请参阅使用规则集指定要运行的 C++ 规则

另请参阅

C6393
C6394
C26861
C26862
C26864