2012-12-13 55 views
17

Ich habe 2 Variablen vom Typ time_t - varEnd und varStart. Um nun den Unterschied zwischen ihnen Entweder ich kann, um zu sehen tunWas ist der Unterschied zwischen Difftime und '-'?

varEnd - varStart; 

oder

difftime(varEnd, varStart); 

und beide gibt die Anzahl von Sekunden.

Bitte lassen Sie mich wissen, wenn sie einen Unterschied haben? oder welches ist das empfohlene?

+2

Warum ist dies markiert als 'C++'? –

+0

@PaulR: 'difftime()' existiert sowohl in C als auch in C++. –

+1

Nun, man kann es wahrscheinlich auch Pascal oder FORTRAN nennen, aber das macht das nicht zu einer Pascal- oder FORTRAN-Frage. ;) –

Antwort

27

Die Sprache gibt an, dass ein arithmetischer time_t Typ Zeiten fähig ist repräsentiere. Es erfordert nicht, dass es Zeiten in irgendeiner bestimmten Weise darstellt.

Wenn time_t die Zeit als Anzahl der Sekunden seit einem Moment darstellt, berechnet der Operator - die Differenz in Sekunden zwischen zwei time_t Werten korrekt.

Wenn dies nicht der Fall ist (z. B. wenn die Granularität eine Millisekunde ist, oder wenn die Bits einer time_t in Gruppen unterteilt sind, die Jahre, Monate, Tage usw. darstellen), kann der Operator sinnlose Ergebnisse liefern.

Die Funktion difftime() andererseits "weiß", wie eine time_t eine Zeit darstellt, und verwendet diese Information, um den Unterschied in Sekunden zu berechnen.

Bei den meisten Implementierungen einfache Subtraktion und difftime() passieren, das Gleiche zu tun - aber nur difftime() ist garantiert korrekt auf alle Implementierungen zu arbeiten.

Ein weiterer Unterschied: difftime() ein Ergebnis der Gleitkomma-Typ zurückgibt double, während "-" auf time_t Werte time_t ein Ergebnis vom Typ ergibt. In den meisten Fällen wird das Ergebnis implizit in den Typ von dem konvertiert, dem Sie es zuweisen, aber wenn time_t zufälligerweise ein vorzeichenloser Integertyp ist, ergibt die Subtraktion einer späteren Zeit von einer früheren Zeit einen sehr großen Wert anstelle eines negativen Werts . Jedes System, das ich gesehen habe, implementiert time_t als 32-Bit oder 64-Bit vorzeichenbehafteten Ganzzahl-Typ, aber die Verwendung eines vorzeichenlosen Typs ist erlaubt - ein weiterer Grund, dass eine einfache Subtraktion von time_t Werten nicht sinnvoll ist.

1

difftime() gibt ein Fließkomma-Double zurück, nur subtrahiert es nicht, es sei denn, Sie werfen sie zuerst doppelt.
Quelle: here

+0

Ja, aber sogar die Umwandlung beider 'time_t'-Operanden in" double "vor dem Subtrahieren garantiert nicht dasselbe wie" difftime "- weshalb" difftime "existiert. Siehe meine Antwort. –

Verwandte Themen