2010-05-28 16 views
10

Pregunta realmente simple. De acuerdo a mi página de manual, estos dos harán lo mismo:time (NULL); vs tiempo (y algo);

time_t t; 
time(&t); 

printf("Time: %ld", t); 

...

printf("Time: %ld", time(NULL)); 

Así que, ¿qué es exactamente el beneficio de pasar un puntero a tiempo? En el caso de que time() falle debido a que no haya reloj disponible, ninguna de las dos variantes tendrá ningún beneficio en mi opinión.

Respuesta

8

El beneficio sería que no tiene que copiar los datos en otra estructura después de llamar a 'hora'.

Si está v.g. Al preparar un búfer de datos para enviar a otra aplicación/servidor, debería copiar los datos, lo cual es una sobrecarga adicional. Al pasar un puntero a su estructura de datos, puede colocarlo en el lugar correcto en una sola toma.

Por supuesto, si su único uso para los datos es convertirlo a otro formato, como un printf de texto, entonces es más eficiente llamarlo con NULL y guardar el almacenamiento adicional requerido por su primer ejemplo.

Por último, dado que la función de tiempo usa una sola ubicación para almacenar su estructura de tiempo interna, el primer método sería más seguro para subprocesos, aunque no recuerdo la parte superior de mi cabeza si 'time' es seguro.

0

Desde la página de manual:

tiempo time_t (time_t * t);

"Si t no es NULL, el valor de retorno también se almacenará en la memoria apuntada por t".

Supongo que es solo material heredado.

+1

OP obtiene esto. Está preguntando por qué querrías pasar un puntero que no sea NULL. –

1

La mayoría de los ejemplos que he visto pasan NULL. Tampoco veo ningún beneficio en pasar un puntero significativo, especialmente porque time_t es casi siempre un tipo integral.

0

Puntero al valor de time_t pasado como un argumento de función - IMO esa es una razón por la que existe la sintaxis.

time_t *foo(time_t *dest) 
{ 
    time(dest); 
    /* do something with dest here */ 
    return dest; 
}