Der Wikipedia-Artikel time_t bringt etwas Licht ins Dunkel. Unterm Strich ist der Typ time_t
wird in der C-Spezifikation nicht garantiert.
Die time_t
Datentyp ist ein Datentyp in der ISO-C-Bibliothek, der zum Speichern von Systemzeitwerten definiert ist. Solche Werte werden vom Standard time()
zurückgegeben Bibliotheksfunktion. Dieser Typ ist eine im Standardheader definierte typedef. ISO C definiert time_t als arithmetischen Typ, spezifiziert aber keinen bestimmten Typ , Bereich, Auflösung oder Kodierung dafür. Ebenfalls nicht spezifiziert sind die Bedeutungen arithmetischer Operationen, die auf Zeitwerte angewendet werden.
Unix- und POSIX-kompatible Systeme implementieren den time_t
als signed
integer
eingeben (normalerweise 32 oder 64 Bit breit), was die Anzahl der Sekunden seit Beginn der Unix-Epoche darstellt :Mitternacht UTC vom 1. Januar 1970 (ohne Schaltsekunden). Einige Systeme verarbeiten negative Zeitwerte korrekt, andere nicht. Systeme mit einem 32-Bit time_t
Typ sind anfällig für das Jahr-2038-Problem.
[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;
Es ist in $INCDIR/bits/types.h
definiert durch:
# 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
Normen
William Brendel hat Wikipedia zitiert, aber ich bevorzuge es aus eigener Feder.
C99 N1256 Standardentwurf 7.23.1/3 "Komponenten der Zeit" sagt:
Die deklarierten Typen sind size_t (beschrieben in 7.17), clock_t und time_t, die arithmetische Typen sind, die Zeiten darstellen können
und 6.2.5/18 "Typen" sagt:
Integer- und Floating-Typen werden gemeinsam als arithmetische Typen bezeichnet.
POSIX 7 sys_types.h sagt:
[CX] time_t muss ein ganzzahliger Typ sein.
wobei [CX]
ist definiert als:
[CX] Erweiterung des ISO-C-Standards.
Es ist eine Erweiterung, weil es eine stärkere Garantie gibt:Fließkommazahlen sind out.
gcc-Einzeiler
Keine Notwendigkeit, eine Datei zu erstellen, wie von Quassnoi erwähnt:
echo | gcc -E -xc -include 'time.h' - | grep time_t
Unter Ubuntu 15.10 GCC 5.2 lauten die oberen beiden Zeilen:
typedef long int __time_t;
typedef __time_t time_t;
Befehlsaufschlüsselung mit einigen Anführungszeichen aus man gcc
:
-E
:"Stopp nach der Vorverarbeitungsphase; führe den Compiler nicht richtig aus."-xc
:Geben Sie die C-Sprache an, da die Eingabe von stdin kommt, das keine Dateierweiterung hat.-include file
:"Datei verarbeiten, als ob "#include "Datei"" als erste Zeile der primären Quelldatei erscheinen würde."-
:Eingabe von stdin