#cpp #время
Как я прочитал на cppstudio, функция time() при передаче ей аргумента, не равного NULL, возвращает то же значение, на которое указывает аргумент. Вопрос: в чём вообще смысл аргумента этой функции, если она, по сути, выполняет с ним разыменование указателя? Я верю, что здесь есть скрытый смысл, но пока что мне представляется, что лучше было бы сделать эту функцию не принимающей аргументов, чтобы она просто возвращала значение текущего времени. Переубедите меня в том, что передавать ей аргумент кроме NULL бесполезно (можно ведь просто разыменовать указатель с помощью *).
Ответы
Ответ 1
Как я прочитал на cppstudio, функция time() при передаче ей аргумента, не равного NULL, возвращает то же значение, на которое указывает аргумент. Она не возвращает то же значение. Ниже приведена POSIX-реализация функции time: time_t time (time_t *t) { struct timeval tv; time_t result; if (__gettimeofday (&tv, (struct timezone *) NULL)) result = (time_t) -1; else result = (time_t) tv.tv_sec; if (t != NULL) *t = result; return result; } Как видите, она не возвращает то же значение - она дублирует результат. Вопрос: в чём вообще смысл аргумента этой функции Возможно, в первых реализациях под Unix, эта функция возвращала X в случае успеха и errno в случае ошибки.Ответ 2
Вероятнее всего потому что это функция из С, а в нём есть принцип возврата кода ошибки функции. В случае неудачи он вернёт -1, и если надо проверить, то просто сделать: time_t __val; if (time(&__val) == -1) { perror ("Time error"); }Ответ 3
Функция time_t time(time_t *tloc) возвращает время в секундах (прошедшее с 01.01.1970 г.) и помещает его же в память по передаваемому ей указателю (адресу памяти). Теперь об ее интерфейсе (почему он такой). Вкратце, конечно, это старое наследство, доставшееся от первых версий Unix. Ее интерфейс в общем виде совпадает с интерфейсом устаревшей функции int ftime(struct timeb *tp), которая заполняла вот такую структуру: struct timeb { time_t time; unsigned short millitm; short timezone; short dstflag; }; и возвращала 0 при успешном вызове и -1 при ошибке (кстати, в то время, когда в программах еще использовалась ftime(), функция time() возвращала время в 32-bit типе long, а типа time_t тогда еще не было). В первом широко распространенном руководстве Stephen R. Bourne. The Unix System написано, что time() и ftime() это две точки входа в общую функцию, что объясняет сходство их интерфейсов. Такая вот, история развития системы.
Комментариев нет:
Отправить комментарий