Как избавиться от предупреждения со временем. H в C ++?
-
18-09-2019 - |
Вопрос
Когда я использую это
#include<time.h>
//...
int n = time(0);
//...
Я получаю предупреждение о преобразовании времени в Int. Есть ли способ удалить это предупреждение?
Решение
Время возвращается time_t
и не целое число. Используйте этот тип предпочтительно, потому что он может быть больше, чем int
.
Если вам действительно нужно int
, затем, например, тип, например:
int n = (int)time(0);
Другие советы
Да, изменить n как time_t
. Анкет Если вы посмотрите на подпись во времени. H в большинстве систем, вы увидите, что это то, что она возвращает.
#include<time.h>
//...
time_t n = time(0);
//...
Обратите внимание, что Арак Правильно: использование 32 -битного int - это проблема, как минимум, Из -за ошибки 2038 года. Анкет Тем не менее, вы должны учитывать, что какой -либо вид арифметики на целом n (а не в Time_t) только увеличивает вероятность того, что ваш код будет рано переходить через эту ошибку.
PS: Если я не дал понять в первоначальном ответе, лучший ответ на предупреждение компилятора - это почти всегда для решения ситуации, о которой вы предупреждаете. Например, применение данных о более высокой точности в более низкую переменную точности теряет информацию - компилятор пытается предупредить вас о том, что вы, возможно, только что создали ошибку на земле, которую кто -то не будет перепрыгнуть гораздо позже.
Я думаю, что вы используете Visual C ++. Тип возврата time(0)
является 64bit int
Даже если вы программируете 32bit
платформа в отличие от g++
. Анкет Чтобы удалить предупреждение, просто назначьте time(0)
к 64bit
переменная.
Вы, вероятно, хотите использовать тип time_t вместо int.
Смотрите пример на http://en.wikipedia.org/wiki/time_t.
Причина в том, что функции Time () возвращает время_T, поэтому вам, возможно, потребуется сделать статический состав в Int или Uint в этом случае. Напишите таким образом:
time_t timer;
int n = static_cast<int> (time(&timer)); // this will give you current time as an integer and it is same as time(NULL)