hay ningún beneficio real en la forma en que está definido actualmente .
Sospecho que cuando se definió por primera vez la función time()
, usaba un tipo que no se podía devolver desde una función. Las implementaciones de C muy antiguas no tenían long int
y no pudieron devolver estructuras de funciones. En un sistema con 16 bits, la única forma de representar un tiempo sería como una estructura o como una matriz; 16 bits en segundos es menos de un día.
Así primeras implementaciones de time()
podrían haber sido utilizados algo como esto (la especulación):
time_t now;
time(&now); /* sets now.time_high, now.time_low */
o tal vez:
int now[2];
time_t(now); /* sets now[0], now[1] */
Cuando más tarde C implementaciones añaden enteros larga y la capacidad para volver estructuras por valor, se agregó la capacidad de devolver un valor de time_t
de la función time()
, pero se mantuvo la funcionalidad anterior para evitar la ruptura del código existente.
Creo que si time()
se estaban definiendo hoy, se vería más como esto:
time_t time(void);
no he podido confirmar que las viejas puestas en práctica de la función time()
trabajado de esta manera (intente buscar en Google " ¡tiempo "!), pero tiene sentido dada la historia del lenguaje.
Si pasa un puntero nulo a la función time()
, devuelve la hora actual sin almacenarla también en una variable; esto evita algunos de los penalización de rendimiento:
time_t now = time(NULL);
Eso suena plausible. Esperaba que la penalización de rendimiento fuera por el otro lado. Se evita si pasa un NULL, pero si lo llama con un puntero e ignora el resultado de la devolución, todavía tiene que meter el tiempo en el registro de devolución. A veces olvido que C tiene casi el doble de edad que yo. :) – wjl
* A veces olvido que C tiene casi el doble de edad que yo. * - ¡Gracias por hacerme sentir viejo! 8-)} –