Язык определяет, что time_t
— это арифметический тип, способный представлять время. Это не требует, чтобы он представлял время каким-либо особым образом.
Если time_t
представляет время как количество секунд, прошедших с некоторого момента, оператор -
правильно вычислит разницу в секундах между двумя значениями time_t
.
Если это не так (скажем, если гранулярность составляет одну миллисекунду или если биты time_t
разделены на группы, представляющие годы, месяцы, дни и т. д.), то оператор -
может дать бессмысленные результаты.
С другой стороны, функция difftime()
"знает", как time_t
представляет время и использует эту информацию для вычисления разницы в секундах.
В большинстве реализаций простое вычитание и difftime()
делают одно и то же, но только difftime()
гарантированно работает правильно во всех реализациях.
Еще одно отличие: difftime()
возвращает результат типа с плавающей запятой double
, а "-"
для time_t
значений дает результат типа time_t
. В большинстве случаев результат будет неявно преобразован в тип того, чему вы его присваиваете, но если time_t
оказывается целым числом без знака, вычитание более позднего времени из более раннего даст очень большое значение, а не отрицательное значение. . Каждая система, которую я видел, реализует time_t
как 32-битный или 64-битный целочисленный тип со знаком, но разрешено использование беззнакового типа — еще одна причина, по которой простое вычитание значений time_t
не обязательно имеет смысл.
person
Keith Thompson
schedule
13.12.2012
C++
? - person Paul R   schedule 13.12.2012difftime()
существует как в C, так и в C++. - person Keith Thompson   schedule 13.12.2012