Avertissement C26862
Un objet
var
date-heure a été créé à partir d’un autre type d’objet date-heure, mais la conversion a été incomplète :expr
Cette règle a été ajoutée dans Visual Studio 2022 17.8.
Notes
L’application appropriée des règles de gestion de l’année bissextile et du jour bissextile nécessite le suivi de la conversion appropriée entre les objets date-heure de différents types tels que le struct Windows SYSTEMTIME
et le struct C tm
. Différents types date/heure peuvent avoir des bases différentes pour les champs année, mois et jour. Par exemple, SYSTEMTIME
a une année basée sur 0, mais 1 mois et jours. D’autre part, tm
a une année basée sur 1900, un mois basé sur 0 et un champ de jour basé sur 1. Pour convertir un objet d’un de ces types en objet d’un autre type, les champs année, mois et jour doivent être ajustés de manière appropriée.
Nom de l’analyse du code : INCOMPLETE_DATETIME_CONVERSION
Exemple
Le code suivant tente de convertir une instance de tm
SYSTEMTIME
. Il apporte l’ajustement nécessaire au champ de l’année, mais n’ajuste pas correctement le champ mois :
#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;
}
Pour résoudre ce problème, ajustez les champs mois et année :
#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;
}
Heuristique
Cette règle reconnaît uniquement le struct Windows SYSTEMTIME
et le struct C tm
.
Cette règle est une règle d’opt-in, ce qui signifie que l’analyse du code doit utiliser un fichier d’ensemble de règles, et que la règle doit être explicitement incluse dans le fichier d’ensemble de règles et activée pour qu’elle soit appliquée. Pour plus d’informations sur la création d’un ensemble de règles personnalisé pour l’analyse du code, consultez Utiliser des ensembles de règles pour spécifier les C++
règles à exécuter.