Uyarı C26862
Farklı bir tarih-saat nesnesi
var
türünden bir tarih-saat nesnesi oluşturuldu ancak dönüştürme tamamlanmadı:expr
Bu kural Visual Studio 2022 17.8'e eklendi.
Açıklamalar
Artık yıl ve artık gün işleme kurallarının uygun şekilde uygulanması için Windows SYSTEMTIME
yapısı ve C tm
yapısı gibi farklı türlerdeki tarih-saat nesneleri arasında doğru dönüştürmenin izlenmesi gerekir. Farklı tarih-saat türlerinin yıl, ay ve gün alanları için farklı temelleri olabilir. Örneğin, SYSTEMTIME
0 tabanlı bir yıl, ancak 1 tabanlı ay ve gün alanları vardır. Öte yandan tm
1900 tabanlı yıl, 0 tabanlı ay ve 1 tabanlı gün alanları vardır. Bu türlerden birinin nesnesini başka türde bir nesneye dönüştürmek için yıl, ay ve gün alanlarının uygun şekilde ayarlanması gerekir.
Kod analizi adı: INCOMPLETE_DATETIME_CONVERSION
Örnek
Aşağıdaki kod, örneğini tm
örneğine dönüştürmeye SYSTEMTIME
çalışır. Yıl alanında gerekli ayarlamayı yapar, ancak ay alanını düzgün ayarlamaz:
#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;
}
Bu sorunu çözmek için ay ve yıl alanlarını ayarlayın:
#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;
}
Buluşsal yöntemler
Bu kural yalnızca Windows SYSTEMTIME
yapısını ve C tm
yapısını tanır.
Bu kural bir kabul kuralıdır, yani kod analizi bir kural kümesi dosyası kullanmalıdır ve kuralın kural kümesi dosyasına açıkça eklenmesi ve uygulanması için etkinleştirilmesi gerekir. Kod analizi için özel kural kümesi oluşturma hakkında daha fazla bilgi için bkz. Çalıştırılacak Kuralları Belirtmek C++
için Kural Kümelerini Kullanma.