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