Я узнал о некоторых базовых функциях C и столкнулся с time(NULL)
в некоторых руководствах.
Что именно это означает?
Я узнал о некоторых базовых функциях C и столкнулся с time(NULL)
в некоторых руководствах.
Что именно это означает?
Вы можете передать указатель на объект time_t
, который time
заполнит текущим временем (и возвращаемое значение будет тем же, на которое вы указали). Если вы проходите в NULL
, он просто игнорирует его и просто возвращает новый объект time_t
, который представляет текущее время.
Вызов time(NULL)
возвращает текущее время календаря (секунды с 1 января 1970 г.). Подробнее см. эту ссылку. Обычно, если вы передадите указатель на переменную time_t
это значение укажет на текущее время.
Функция time
возвращает текущее время (как значение time_t
) в секундах с некоторой точки (в системах Unix, с полуночи UTC 1 января 1970 г.), и она принимает один аргумент, указатель time_t
в котором хранится время. Передача NULL
в качестве аргумента приводит к тому, что time
возвращает время как нормальное возвращаемое значение, но не сохраняет его где-либо еще.
Time
: он возвращает время, прошедшее через секунды с эпохи 1 янв 1970
int main (void)
{
//print time in seconds from 1 Jan 1970 using c
float n = time(NULL);
printf("%.2f\n" , n);
}
это печатает 1481986944.00 (на данный момент).
Вы должны обратиться к документации для ctime. time
- это функция, которая принимает один параметр типа time_t *
(указатель на объект time_t
) и назначает ему текущее время. Вместо передачи этого указателя вы также можете передать NULL
, а затем использовать возвращаемое значение time_t.
[Ответ скопирован из повторяющегося, теперь удаленного вопроса.]
time()
- очень старая функция. Он восходит к тому дню, когда на языке C не было типа long
. Когда-то, единственный способ получить что-то вроде 32-битного типа состоял в том, чтобы использовать массив из двух int
- и это было тогда, когда int
были 16 бит.
Итак, вы позвонили
int now[2];
time(now);
и он заполнил 32-битное время в now[0]
и now[1]
, по 16 бит за раз. (Это объясняет, почему другие связанные с временем функции, такие как localtime
и ctime
, склонны принимать свои временные аргументы через указатели тоже.)
Позднее dmr завершил добавление long
в компилятор, чтобы вы могли начать говорить
long now;
time(&now);
Позже кто-то понял, что было бы полезно, если бы time()
пошел вперед и вернул значение, а не просто заполнил его с помощью указателя. Но - обратная совместимость - замечательная вещь - для всего кода, который все еще выполнял time(&now)
, функция time()
должна была поддерживать аргумент указателя. Вот почему - и поэтому обратная совместимость не всегда такая замечательная вещь - если вы используете возвращаемое значение, вам все равно нужно передать NULL в качестве указателя:
long now = time(NULL);
(Позже мы, конечно же, начали использовать time_t
вместо plain long
для времени, так что, например, его можно изменить на 64-разрядный тип, уклонившись от проблемы y2.038k.)
[P.S. На самом деле я не уверен, что изменение от int [2]
до long
, а изменение для добавления возвращаемого значения произошло в разное время; они могли произойти одновременно. Но обратите внимание, что когда время было представлено как массив, его нужно было заполнить с помощью указателя, его нельзя было бы вернуть в качестве значения, потому что, конечно, функции C не могут возвращать массивы.]
Вы можете передать указатель на объект time_t
, что время будет заполнено текущим временем (и возвращаемое значение будет тем же, на которое вы указали). Если вы проходите в NULL
, он просто игнорирует его и просто возвращает новый объект time_t
, который представляет текущее время.
Nb:time(&timer);
эквивалентно timer = time(NULL);