﻿# V795\. Size of the 'time\_t' type is not 64 bits\. After the year 2038, the program will work incorrectly\.

Анализатор обнаружил, что в проекте используются 32\-битные типы данных для хранения времени\. Данная проблема затрагивает программы, использующие типы данных, представляющие собой количество секунд, прошедшее с 1 января 1970 года\. Таким образом не удастся корректно работать с датами после 19 января 2038\. Рекомендуется использовать 64\-битные типы данных для хранения времени\.

Стандарт языка С/C\+\+ не определяет размер типа 'time\_t', поэтому в зависимости от платформы и настроек проекта он может быть определён по\-разному:

```cpp
typedef /* unspecified */ time_t;
```

В старых версиях Visual C\+\+ тип 'time\_t' являлся 32\-разрядным типом в 32\-разрядных версиях Windows\. Начиная с Visual C\+\+ 2005 тип 'time\_t' по умолчанию представляет собой 64\-разрядное целое число\. В современных версиях Visual C\+\+ можно принудительно установить размер типа 'time\_t' равным 32 битам с помощью директивы '\_USE\_32BIT\_TIME\_T'\. По возможности стоит избавиться от этой директивы и использовать 64\-битный тип time\_t\.

В Linux тип 'time\_t' является 64\-разрядным типом только в 64\-разрядных версиях ОС\. На 32\-битных Linux\-системах, к сожалению, пока не существует стандартного способа сделать тип 'time\_t' 64\-разрядным\. Возможно стоит отказаться от использования типа 'time\_t' в пользу сторонних решений\.

Дополнительные ресурсы:

1. [2038: остался всего 21 год](https://pvs-studio.ru/ru/blog/posts/cpp/0505/)
1. [Проблема 2038 года](https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_2038_%D0%B3%D0%BE%D0%B4%D0%B0)
1. [https://msdn\.microsoft\.com/ru\-ru/library/w4ddyt9h\.aspx](https://msdn.microsoft.com/ru-ru/library/w4ddyt9h.aspx)