2012-12-13 11 views
17

Mam 2 zmienne typu time_t - varEnd i varStart. Teraz, aby zobaczyć różnicę między nimi Albo mogę zrobićjaka jest różnica między difftime i "-"?

varEnd - varStart; 

lub

difftime(varEnd, varStart); 

i oba zwraca liczbę sekund.

Proszę dać mi znać, jeśli mają jakieś znaczenie? lub który jest zalecany?

+2

Dlaczego jest to oznaczane jako 'C++'? –

+0

@PaulR: 'difftime()' istnieje zarówno w C jak i C++. –

+1

Cóż, możesz prawdopodobnie nazwać to również Pascalem lub FORTRANEM, ale to nie czyni tego pytania Pascalem ani FORTRANEM. ;) –

Odpowiedz

27

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.

1

difftime() zwraca zmiennoprzecinkowe podwójne, po prostu odejmując je, chyba że je wyrzucisz dwukrotnie.
źródło: here

+0

Tak, ale nawet przekonwertowanie obu argumentów 'time_t' na' double' przed odjęciem ich nie gwarantuje tego samego co 'difftime' - dlatego właśnie istnieje" difftime ". Zobacz moją odpowiedź. –

Powiązane problemy