¿Qué tipo de datos primitivos es time_t?

No sé el tipo de datos de time_t . ¿Es un flotador doble o algo más? Porque si quiero mostrarlo, necesito la etiqueta que se corresponde con él para printf . Puedo manejar el rest desde allí para mostrar time_t pero necesito saber el tipo de datos que se corresponde con él.

Desafortunadamente, no es completamente portátil. Por lo general, es integral, pero puede ser cualquier “tipo entero o flotante real”.

Es específico de la plataforma. Pero puedes convertirlo a un tipo conocido.

 printf("%lld\n", (long long) time(NULL)); 

Puedes usar la función difftime . Devuelve la diferencia entre dos valores time_t dados, el valor de salida es el double (consulte la documentación de difftime ).

 time_t actual_time; double actual_time_sec; actual_time = time(0); actual_time_sec = difftime(actual_time,0); printf("%g",actual_time_sec); 

Siempre puedes usar algo como mktime para crear una hora conocida (medianoche, anoche) y usar difftime para obtener una diferencia de tiempo de doble precisión entre las dos. Para una solución independiente de la plataforma, a menos que vaya profundizando en los detalles de sus bibliotecas, no va a hacer mucho mejor que eso. Según la especificación C, la definición de time_t está definida por la implementación (lo que significa que cada implementación de la biblioteca puede definirla como prefieran, siempre que las funciones de biblioteca con el uso se comporten de acuerdo con la especificación).

Una vez dicho esto, el tamaño de time_t en mi máquina Linux es de 8 bytes, lo que sugiere un int largo o un doble. Así que lo hice:

 int main() { for(;;) { printf ("%ld\n", time(NULL)); printf ("%f\n", time(NULL)); sleep(1); } return 0; } 

El tiempo otorgado por% ld aumentó en uno en cada paso y el flotante imprimió 0.000 cada vez. Si está empeñado en usar printf para mostrar time_ts, su mejor opción es probar su propio experimento y ver cómo funciona en su plataforma y con su comstackdor.