Поскольку time_t
просто определяется в стандарте как arithmetic type capable of representing times
.
Это все, что в нем сказано.Это не должно быть целым числом, оно не должно представлять секунды.Он может быть кратен только десяти, или это может быть тип с плавающей запятой, способный отображать времена с точностью до 10 -43 секунд.
Цитата из C99 7.23.1 Components of time
:(слегка перефразировано):
Объявлены типы clock_t
и time_t
, которые являются арифметическими типами, способными представлять время.Диапазон и точность времени, представленного в clock_t и time_t, определяются реализацией.
Следовательно, люди, которые слепо отрабатывают разницу во времени с помощью:
delta = time_end - time_begin;
, могут обнаружить, что их кодне работает на всех платформах.
Теперь я не знаю, на какой платформе мне нравятся платформы, где не было простых секунд со времен, но меня укусили предположения вроде это раньше, например, если предположить, что от A
до Z
смежны, тогда как на самом деле это не требуется и не очень хорошо работает с продуктами мэйнфреймов, использующими EBCDIC.И, да, они все еще в тяжелом использовании, несмотря на то, что, очевидно, умирают с 60-х годов: -)
В обосновании документа C99 говорится следующее:
Типы clock_t
и time_t
являются арифметическими, потому что значения этих типов должны, в соответствии с существующей практикой, иногда сравниваться с -1 (индикация «не знаю»)), соответствующим образом приведенный.
Стандарт не определяет арифметические свойства этих типов, однако, чтобы позволить реализациям максимальную гибкость в выборе диапазонов, точности и представлений, наиболее подходящих для их предполагаемого применения.Представление не должно быть подсчетом некоторой базовой единицы;Реализация может представлять различные компоненты временного значения как подполя целочисленного типа.