Non c'è alcun reale beneficio nel modo in cui è attualmente definito .
Sospetto che quando è stata definita la funzione time()
, ha utilizzato un tipo che non è stato possibile restituire da una funzione. Le implementazioni C molto iniziali non avevano long int
e non erano in grado di restituire strutture dalle funzioni. Su un sistema con intep da 16 bit, l'unico modo per rappresentare un tempo sarebbe come una struttura o come una matrice; 16 bit del valore di secondi è inferiore a un giorno.
così presto implementazioni di time()
potrebbero essere stati utilizzati qualcosa di simile (speculazione):
time_t now;
time(&now); /* sets now.time_high, now.time_low */
o forse:
int now[2];
time_t(now); /* sets now[0], now[1] */
Quando più tardi C implementazioni aggiunti interi più lungo e la capacità di restituire le strutture in base al valore, è stata aggiunta la possibilità di restituire un valore time()
dalla funzione time()
, ma è stata mantenuta la vecchia funzionalità per evitare di rompere il codice esistente.
Penso che se time()
venivano definiti oggi, sarebbe un aspetto più simile a questo:
time_t time(void);
non sono stato in grado di confermare che le vecchie implementazioni della funzione time()
lavorato in questo modo (prova Googling " tempo "!), ma ha senso data la storia della lingua.
Se si passa un puntatore nullo alla funzione time()
, restituisce l'ora corrente senza memorizzarla in una variabile; questo evita alcuni dei termini di prestazioni:
time_t now = time(NULL);
fonte
2012-03-30 15:10:37
Sembra plausibile. Mi aspettavo che la penalità per le prestazioni andasse dall'altra parte. Viene evitato se si passa un NULL, ma se lo si chiama con un puntatore e si ignora il risultato di ritorno, è comunque necessario inserire il tempo nel registro di ritorno. A volte dimentico che C ha quasi il doppio di me. :) – wjl
* A volte dimentico che C ha quasi il doppio di me. * - Grazie per avermi fatto sentire vecchio! 8-)} –