El artículo de Wikipedia time_t arroja algo de luz sobre esto. La conclusión es que el tipo de time_t
no está garantizado en la especificación C.
El time_t
datatype es un tipo de datos en la biblioteca ISO C definido para almacenar valores de tiempo del sistema. Dichos valores se devuelven desde el estándar time()
función de biblioteca. Este tipo es un typedef definido en el encabezado estándar. ISO C define time_t como un tipo aritmético, pero no especifica ningún tipo en particular ,rango, resolución o codificación. Tampoco se especifican los significados de las operaciones aritméticas aplicadas a los valores de tiempo.
Los sistemas compatibles con Unix y POSIX implementan el time_t
escriba como signed
integer
(típicamente 32 o 64 bits de ancho) que representa el número de segundos desde el comienzo de la época de Unix :medianoche UTC del 1 de enero de 1970 (sin contar los segundos bisiestos). Algunos sistemas manejan correctamente los valores de tiempo negativos, mientras que otros no. Sistemas que utilizan time_t
de 32 bits son susceptibles al problema del año 2038.
[root]# cat time.c
#include <time.h>
int main(int argc, char** argv)
{
time_t test;
return 0;
}
[root]# gcc -E time.c | grep __time_t
typedef long int __time_t;
Está definido en $INCDIR/bits/types.h
a través de:
# 131 "/usr/include/bits/types.h" 3 4
# 1 "/usr/include/bits/typesizes.h" 1 3 4
# 132 "/usr/include/bits/types.h" 2 3 4
Estándares
William Brendel citó Wikipedia, pero yo lo prefiero con la boca del caballo.
C99 N1256 borrador estándar 7.23.1/3 "Componentes del tiempo" dice:
Los tipos declarados son size_t (descrito en 7.17) clock_t y time_t que son tipos aritméticos capaces de representar tiempos
y 6.2.5/18 "Tipos" dice:
Los tipos enteros y flotantes se denominan colectivamente tipos aritméticos.
POSIX 7 sys_types.h dice:
[CX] time_t debe ser de tipo entero.
donde [CX]
se define como:
[CX] Ampliación de la norma ISO C.
Es una extensión porque hace una garantía más fuerte:los puntos flotantes están fuera.
gcc de una sola línea
No es necesario crear un archivo como lo menciona Quassnoi:
echo | gcc -E -xc -include 'time.h' - | grep time_t
En Ubuntu 15.10 GCC 5.2, las dos líneas superiores son:
typedef long int __time_t;
typedef __time_t time_t;
Desglose de comandos con algunas citas de man gcc
:
-E
:"Deténgase después de la etapa de preprocesamiento; no ejecute el compilador correctamente".-xc
:especifique el lenguaje C, ya que la entrada proviene de stdin que no tiene extensión de archivo.-include file
:"Procesar archivo como si "#include" archivo "" apareciera como la primera línea del archivo fuente principal".-
:entrada desde stdin