К сожалению, он не является полностью переносимым. Обычно это интеграл, но он может быть любым "целочисленным или вещественным плавающим типом".
Он специфичны для платформы. Но вы можете отлить его к известному типу.
printf("%lld\n", (long long) time(NULL));
Вы всегда можете использовать что-то вроде mktime чтобы создать известное время (полночь, вчера вечером) и использовать difftime, чтобы получить разницу во времени с двойной точностью между ними. Для независимого от платформы решения, если вы не углубитесь в детали своих библиотек, вы не добьетесь большего успеха. Согласно спецификации C, определение time_t определяется реализацией (это означает, что каждая реализация библиотеки может определять его так, как им нравится, пока библиотечные функции, использующие его, ведут себя в соответствии со спецификацией)
. , размер time_t на моей Linux-машине составляет 8 байтов, что предполагает длинное int или double. Итак, я сделал:
int main()
{
for(;;)
{
printf ("%ld\n", time(NULL));
printf ("%f\n", time(NULL));
sleep(1);
}
return 0;
}
Время, указанное в% ld, увеличивалось на единицу на каждом шаге, и float каждый раз печатал 0,000. Если вы одержимы использованием printf для отображения time_ts, лучше всего попробовать свой собственный такой эксперимент и посмотреть, как он работает на вашей платформе и с вашим компилятором.