Článek time_t na Wikipedii to trochu osvětlí. Základem je typ time_t
není zaručeno ve specifikaci C.
time_t
datový typ je datový typ v knihovně ISO C definovaný pro ukládání hodnot systémového času. Takové hodnoty jsou vráceny ze standardutime()
funkce knihovny. Tento typ je definován jako atypedef ve standardheader. ISO C definujetime_t jako aritmetický typ, ale neurčuje žádný konkrétní typ ,rozsah, rozlišení nebo kódování pro to.Nespecifikován je také význam aritmetických operací aplikovaných na časové hodnoty.Systémy kompatibilní s Unixem a POSIX implementují
time_t
zadejte jakosigned integer
(obvykle 32 nebo 64 bitů široký), což představuje počet sekund od začátku epochy Unix :půlnoc UTC z 1. ledna 1970 (bez přestupných sekund). Některé systémy správně zpracovávají záporné časové hodnoty, zatímco jiné ne. Systémy používající 32bitovétime_t
typu jsou náchylné k problému roku 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;
Je definován v $INCDIR/bits/types.h
přes:
# 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
Standardy
William Brendel citoval Wikipedii, ale já to preferuji z koňské tlamy.
Standardní návrh C99 N1256 7.23.1/3 "Složky času" říká:
Deklarované typy jsou size_t (popsané v 7.17), clock_t a time_t, což jsou aritmetické typy schopné reprezentovat časy
a 6.2.5/18 „Typy“ říká:
Celočíselné a plovoucí typy se souhrnně nazývají aritmetické typy.
POSIX 7 sys_types.h říká:
[CX] time_t musí být celočíselný typ.
kde [CX]
je definován jako:
[CX] Rozšíření standardu ISO C.
Je to rozšíření, protože poskytuje silnější záruku:plovoucí čárky jsou mimo.
gcc one-liner
Není třeba vytvářet soubor, jak uvádí Quassnoi:
echo | gcc -E -xc -include 'time.h' - | grep time_t
Na Ubuntu 15.10 GCC 5.2 jsou dva horní řádky:
typedef long int __time_t;
typedef __time_t time_t;
Rozdělení příkazů s některými uvozovkami z man gcc
:
-E
:"Zastavte se po fázi předběžného zpracování; nespouštějte správný kompilátor."-xc
:Určete jazyk C, protože vstup pochází z stdin, který nemá příponu souboru.-include file
:"Zpracujte soubor, jako by se na prvním řádku primárního zdrojového souboru objevilo "#include "file""-
:vstup z stdin