2011-01-14 2 views
4

Почему функция time обычно используется следующим образом:времени Функция Синтаксис

time_t currentTime; 
currentTime = time(NULL); 

вместо этого:

time_t currentTime; 
time(&currentTime); 

используется первый метод более просто потому, что это, возможно, более удобным для чтения? Или есть еще одна причина?

Спасибо.

Редактировать: Кроме того, почему функция time даже спроектирована таким образом? Почему есть два способа установить переменную?

+0

Второй пример должен быть «time (& currentTime);' –

+0

@Steve Right. Я исправлю это. –

+3

Я думаю, что вопрос дизайна в вашем редактировании - более интересный вопрос. Есть (или было) там фактическое обоснование, или это просто какая-то случайность? –

ответ

6

Кажется, что имеет смысл возвращать значение из функции, чем передавать параметр, который изменяется.

Возможно, это связано с тем, что мы узнали о языках, на которых функции и подпрограммы были разными, сегодня не знаю об этих молодых людей.

+0

** Неизменность ** –

+0

@Matt какой? не могли бы вы уточнить? –

+0

@ Jay - в частности. Python, где значения (числа) неизменяемы, 'def f (i): return i + 1' /' i = 0; i = f (i) 'работает, но' def g (i): i + = 1'/'i = 0; f (i) 'does not (на самом деле нет действительно хорошего способа, который я могу придумать, чтобы заставить его работать). –

-1

Параметр таймера является указателем на объект типа time_t, где хранится значение времени. Альтернативно этот параметр может быть нулевым указателем, и в этом случае параметр не используется, но объект time_t все еще возвращается функцией.

Так что вам не нужно создавать объект time_t.

+1

Я знаю, как работает функция 'time', это не вопрос. Что касается вашего последнего предложения, вы имеете в виду, что вам не нужно создавать объект 'time_t' на более ранней строке? Поскольку вам все еще нужно создать объект 'time_t' ... –

+0

, в первом блоке кода есть ненужная строка' time_t currentTime; '. Я полагаю, что функция 'time (NULL)' создает объект time_t, поэтому вам не нужно создавать свои собственные (вы его не используете). EDIT: параметр таймера является единственным параметром функции времени –

+1

да? о чем ты говоришь? –

1

Конечно, только K & R, вероятно, знает истинный ответ, но мой подозреваемый - это просто «инцидент» из-за исторических причин реализации. Например, может быть дизайн этой функции запущен как void time(time_t*), потому что просто невозможно было в какой-то форме pre-ansi C вернуть значение типа time_t и только позже развилось в функции возврата значения.

Если это объяснение, то причина сохранения параметра в любом случае - это, конечно, обратная совместимость с существующим кодом.

1

Наиболее распространенный формат является фактически time_t currentTime = time(NULL);

Это короче, и не оставляет currentTime переменных неинициализированные. Этот параметр является исторической катастрофой и бесполезен.

Смежные вопросы