Język określa, że time_t
jest typem arytmetycznym, który może reprezentować czasy. Nie wymaga to reprezentowania czasów w jakikolwiek określony sposób.
Jeśli godzina time_t
reprezentuje czas jako liczbę sekund od pewnego momentu, operator -
poprawnie obliczy różnicę w sekundach między dwiema wartościami: time_t
.
Jeśli tak nie jest (powiedzmy, jeśli ziarnistość wynosi jedną milisekundę lub jeśli bity z time_t
są podzielone na grupy reprezentujące lata, miesiące, dni itd.), Operator -
może przynieść pozbawione znaczenia wyniki.
Z drugiej strony funkcja difftime()
"wie", w jaki sposób time_t
reprezentuje czas i wykorzystuje tę informację do obliczenia różnicy w sekundach.
W większości implementacji, prostego odejmowania i difftime()
zdarzy się to samo - ale jest gwarantowana tylko difftime()
pracować poprawnie na wszystkich wdrożeń.
Kolejna różnica: difftime()
zwraca wynik zmiennoprzecinkową typu double
, natomiast "-"
na time_t
wartości daje wynik typu time_t
. W większości przypadków wynik zostanie niejawnie przekonwertowany na typ tego, co go przypisze, ale jeśli time_t
stanie się niepodpisanym typem całkowitym, odjęcie późniejszego czasu z wcześniejszej wartości da bardzo dużą wartość, a nie wartość ujemną . Każdy system, który widziałem implementuje time_t
jako 32- lub 64-bitową liczbę całkowitą ze znakiem, ale użycie typu bez znaku jest dozwolone - jeszcze jeden powód, dla którego proste odjęcie wartości time_t
nie jest konieczne.
Dlaczego jest to oznaczane jako 'C++'? –
@PaulR: 'difftime()' istnieje zarówno w C jak i C++. –
Cóż, możesz prawdopodobnie nazwać to również Pascalem lub FORTRANEM, ale to nie czyni tego pytania Pascalem ani FORTRANEM. ;) –