L'articolo dell'articolo di Wikipedia time_t fa luce su questo. La linea di fondo è che il tipo di time_t
non è garantito nella specifica C.
Il
time_t
tipo di dati è un tipo di dati nella libreria ISO C definita per la memorizzazione dei valori dell'ora di sistema. Tali valori vengono restituiti dallo standardtime()
funzione di libreria. Questo tipo è un typedef definito nell'intestazione standard. ISO C definisce time_t come un tipo aritmetico, ma non specifica alcun tipo particolare , intervallo, risoluzione o codifica. Anche i significati delle operazioni aritmetiche applicate ai valori temporali non sono specificati.I sistemi compatibili con Unix e POSIX implementano il
time_t
digitare comesigned integer
(tipicamente 32 o 64 bit di larghezza) che rappresenta il numero di secondi dall'inizio dell'epoca Unix :mezzanotte UTC del 1 gennaio 1970 (senza contare i secondi intercalari). Alcuni sistemi gestiscono correttamente i valori temporali negativi, mentre altri no. Sistemi che utilizzanotime_t
a 32 bit sono suscettibili al problema dell'anno 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;
È definito in $INCDIR/bits/types.h
tramite:
# 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
Standard
William Brendel ha citato Wikipedia, ma lo preferisco dalla bocca del cavallo.
Bozza standard C99 N1256 7.23.1/3 "Componenti del tempo" dice:
I tipi dichiarati sono size_t (descritti in 7.17) clock_t e time_t che sono tipi aritmetici in grado di rappresentare tempi
e 6.2.5/18 "Tipi" dice:
I tipi interi e mobili sono chiamati collettivamente tipi aritmetici.
POSIX 7 sys_types.h dice:
[CX] time_t deve essere un tipo intero.
dove [CX]
è definito come:
[CX] Estensione allo standard ISO C.
È un'estensione perché fornisce una garanzia più forte:i punti mobili sono eliminati.
una riga di gcc
Non c'è bisogno di creare un file come menzionato da Quassnoi:
echo | gcc -E -xc -include 'time.h' - | grep time_t
Su Ubuntu 15.10 GCC 5.2 le prime due righe sono:
typedef long int __time_t;
typedef __time_t time_t;
Suddivisione dei comandi con alcune virgolette da man gcc
:
-E
:"Arresta dopo la fase di pre-elaborazione; non eseguire il compilatore vero e proprio."-xc
:Specifica il linguaggio C, poiché l'input proviene da stdin che non ha estensione di file.-include file
:"Elabora il file come se "#include "file"" apparisse come prima riga del file sorgente primario."-
:input da stdin