Время (NULL); против времени (и что-то); - PullRequest
10 голосов
/ 28 мая 2010

Реальный простой вопрос. Согласно моей man-странице, эти двое будут делать то же самое:

time_t t;
time(&t);

printf("Time: %ld", t);

...

printf("Time: %ld", time(NULL));

Итак, что именно дает указатель времени? В случае сбоя time() из-за отсутствия часов, по моему мнению, ни один из двух вариантов не принесет никакой пользы.

Ответы [ 4 ]

8 голосов
/ 28 мая 2010

Преимущество состоит в том, что вам не нужно копировать данные в другую структуру после вызова 'time'.

Если вы, например, подготавливая буфер данных для отправки другому приложению / серверу, вам придется скопировать данные, что является дополнительными затратами. Передав указатель в вашу структуру данных, вы можете поместить его в правильное место за один раз.

Конечно, если вы используете данные только для преобразования их в другой формат, такой как текстовый printf, тогда более эффективно вызывать их с помощью NULL и сохранять дополнительное хранилище, необходимое для первого примера.

Наконец, поскольку функция времени использует одно место для хранения своей внутренней структуры времени, первый метод будет более поточно-ориентированным, хотя я не могу вспомнить верхнюю часть моей головы, если бы «время» на самом деле было поточно-ориентированным.

1 голос
/ 28 мая 2010

Большинство примеров, которые я видел, проходят NULL. Я также не вижу никакой выгоды в передаче значимого указателя, тем более что time_t почти всегда является целочисленным типом.

0 голосов
/ 28 мая 2010

Указатель на значение time_t, переданное в качестве аргумента функции - ИМО это одна из причин, почему синтаксис существует.

time_t *foo(time_t *dest)
{
     time(dest);
     /* do something with dest here */
     return dest;
}
0 голосов
/ 28 мая 2010

С man-страницы:

time_t time (time_t * t);

"Если t не равен NULL, возвращаемое значение также будет сохранено в памяти, на которую указывает t."

Полагаю, это просто устаревшие вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...