경고 C26862
날짜-시간 개체
var
는 다른 형식의 날짜-시간 개체에서 만들어졌지만 변환이 완료되지 않았습니다.expr
이 규칙은 Visual Studio 2022 17.8에 추가되었습니다.
설명
윤년 및 윤일 처리 규칙을 적절하게 적용하려면 Windows SYSTEMTIME
구조체와 C tm
구조체와 같은 다양한 형식의 날짜-시간 개체 간에 적절한 변환을 추적해야 합니다. 날짜-시간 유형마다 연도, 월 및 일 필드의 기준이 다를 수 있습니다. 예를 들어 SYSTEMTIME
0부터 시작하는 연도가 있지만 1부터 시작하는 월 및 일 필드가 있습니다. 반면 tm
에 1900부터 시작하는 연도, 0부터 시작하는 월 및 1부터 시작하는 일 필드가 있습니다. 이러한 형식 중 하나의 개체를 다른 형식의 개체로 변환하려면 연도, 월 및 일 필드를 적절하게 조정해야 합니다.
코드 분석 이름: INCOMPLETE_DATETIME_CONVERSION
예시
다음 코드는 인스턴스를 인스턴스 tm
로 변환하려고 시도합니다 SYSTEMTIME
. 연도 필드에 필요한 조정을 수행하지만 월 필드를 제대로 조정하지는 않습니다.
#include <Windows.h>
#include <ctime>
void ConvertTmToSystemTime1b(const tm& tm)
{
SYSTEMTIME st;
st.wYear = tm.tm_year + 1900;
st.wMonth = tm.tm_mon; // C26862, Adjustment is missing
st.wDay = tm.tm_mday;
}
이 문제를 해결하려면 월 및 연도 필드를 조정합니다.
#include <Windows.h>
#include <ctime>
void ConvertTmToSystemTime(const tm& tm)
{
SYSTEMTIME st;
st.wYear = tm.tm_year + 1900;
st.wMonth = tm.tm_mon + 1;
st.wDay = tm.tm_mday;
}
경험적 학습
이 규칙은 Windows SYSTEMTIME
구조체와 C tm
구조체만 인식합니다.
이 규칙은 옵트인 규칙입니다. 즉, 코드 분석에서 규칙 집합 파일을 사용해야 하며 규칙이 규칙 집합 파일에 명시적으로 포함되어 적용되도록 설정되어야 합니다. 코드 분석을 위한 사용자 지정 규칙 집합을 만드는 방법에 대한 자세한 내용은 규칙 집합을 사용하여 실행할 규칙 지정 C++
을 참조하세요.