Там нет никакой реальной пользы в том, как это определено в настоящее время ,
Я подозреваю, что когда функция time()
была определена впервые, она использовала тип, который не может быть возвращен функцией. В очень ранних реализациях C не было long int
и они не смогли вернуть структуры из функций. В системе с 16-битными ints единственным способом представления времени будет структура или массив; 16 бит на секунды меньше, чем на один день.
time_t now;
time(&now); /* sets now.time_high, now.time_low */
или возможно::
Так ранние реализации time()
могли быть что-то вроде этого (спекуляции) использовали
int now[2];
time_t(now); /* sets now[0], now[1] */
Когда позже реализации C добавляют более длинные целые числа, а также возможность возврата структур по значению добавлена возможность вернуть значение time_t
из функции time()
, но старые функции были сохранены, чтобы избежать нарушения существующего кода.
Я думаю, что если time()
были определены сегодня, это будет выглядеть следующим образом:
time_t time(void);
Я не был в состоянии подтвердить, что старые реализации функции time()
работала таким образом (попробуйте погуглить " время "!), но это имеет смысл, учитывая историю языка.
Если вы передаете нулевой указатель на функцию time()
, он возвращает текущее время без сохранения его в переменной; это позволяет избежать некоторых потерь производительности:
time_t now = time(NULL);
Это звучит правдоподобно. Я ожидал, что штраф за исполнение будет идти другим путем. Этого избегают, если вы передаете NULL, но если вы вызываете его указателем и игнорируете результат возврата, ему все равно нужно засунуть время в регистр возврата. Иногда я забываю, что C почти в два раза старше меня. :) – wjl
* Иногда я забываю, что C почти в два раза старше меня. * - Спасибо, что заставил меня чувствовать себя старым! 8-)} –