Nie ma realne korzyści w sposób aktualnie zdefiniowane .
Podejrzewam, że po pierwszym zdefiniowaniu funkcji time()
użył on typu, którego nie można zwrócić z funkcji. Bardzo wczesne implementacje C nie miały long int
i nie były w stanie zwrócić struktur z funkcji. W systemie z 16-bitowymi intami jedyny sposób reprezentowania czasu byłby strukturą lub tablicą; 16 bitów wartości sekund to mniej niż jeden dzień.
time_t now;
time(&now); /* sets now.time_high, now.time_low */
Albo::
tak wcześnie implementacje time()
mogło być coś takiego (spekulacji) stosowany
int now[2];
time_t(now); /* sets now[0], now[1] */
Kiedy później implementacje C dodaje dłuższe całkowite i zdolność do powrotu struktur według wartości dodana została możliwość zwrócenia wartości time_t
z funkcji time()
, ale zachowano starą funkcjonalność, aby uniknąć złamania istniejącego kodu.
myślę, że jeśli time()
były zdefiniowane dzisiaj, to będzie wyglądać mniej więcej tak:
time_t time(void);
nie byłem w stanie potwierdzić, że stare implementacje funkcji time()
pracował w ten sposób (spróbuj Googling " czas "!), ale ma sens biorąc pod uwagę historię tego języka.
Po przekazaniu zerowego wskaźnika do funkcji time()
, zwraca bieżący czas bez zapisywania go w zmiennej; pozwala to uniknąć niektórych spadku wydajności:
time_t now = time(NULL);
To brzmi wiarygodnie. Spodziewałem się, że kara za wyniki pójdzie w drugą stronę. Unika się go, jeśli przekażemy wartość NULL, ale jeśli wywołamy go wskaźnikiem i zignorujemy wynik zwracany, to nadal musimy wrzucić ten czas do rejestru zwrotów. Czasami zapominam, że C jest prawie dwa razy starsza ode mnie. :) – wjl
* Czasami zapominam, że C jest prawie dwa razy starszy ode mnie. * - Dzięki za sprawienie, że poczuję się stary! 8-)} –