Как я прочитал на cppstudio, функция time()
при передаче ей аргумента, не равного NULL
, возвращает то же значение, на которое указывает аргумент.
Вопрос: в чём вообще смысл аргумента этой функции, если она, по сути, выполняет с ним разыменование указателя? Я верю, что здесь есть скрытый смысл, но пока что мне представляется, что лучше было бы сделать эту функцию не принимающей аргументов, чтобы она просто возвращала значение текущего времени. Переубедите меня в том, что передавать ей аргумент кроме NULL
бесполезно (можно ведь просто разыменовать указатель с помощью *
).
Как я прочитал на 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
в случае ошибки.
Вероятнее всего потому что это функция из С, а в нём есть принцип возврата кода ошибки функции. В случае неудачи он вернёт -1, и если надо проверить, то просто сделать:
time_t __val;
if (time(&__val) == -1)
{
perror ("Time error");
}
Функция 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()
это две точки входа в общую функцию, что объясняет сходство их интерфейсов.
Такая вот, история развития системы.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я хочу понять, существует ли какой-то единый способ лечения циклических зависимостей?
CodeBlocks на Ubuntu 1804 не форматирует фигурные скобки как в Windows версии
Подскажите пожалуйста, как сделать что бы время было по центру border-right?