Как избавиться от предупреждения со временем. H в C ++?

StackOverflow https://stackoverflow.com/questions/1482656

Вопрос

Когда я использую это

#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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top