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.
Warum ist dies markiert als 'C++'? –
@PaulR: 'difftime()' existiert sowohl in C als auch in C++. –
Nun, man kann es wahrscheinlich auch Pascal oder FORTRAN nennen, aber das macht das nicht zu einer Pascal- oder FORTRAN-Frage. ;) –