В чем разница между difftime и '-'?

У меня есть 2 переменных типа time_t - varEnd и varStart. Теперь, чтобы увидеть разницу между ними Либо я могу сделать

varEnd - varStart; 

или

difftime(varEnd, varStart);

и оба возвращают количество секунд.

Пожалуйста, дайте мне знать, если у них есть какая-то разница? или который является рекомендуемым?

Ответы

Ответ 1

Язык указывает, что time_t - это арифметический тип, способный представлять время. Он не требует, чтобы он представлял времена каким-либо определенным образом.

Если time_t представляет время как количество секунд с некоторого момента, оператор - будет правильно вычислять разницу в секундах между двумя значениями time_t.

Если это не так (например, если гранулярность составляет одну миллисекунду или если биты a time_t делятся на группы, представляющие годы, месяцы, дни и т.д.), то оператор - может дать бессмысленные результаты.

Функция difftime(), с другой стороны, "знает", как time_t представляет время и использует эту информацию для вычислите разницу в секундах.

В большинстве реализаций простое вычитание и difftime() выполняют одно и то же, но только difftime() гарантированно работает правильно во всех реализациях.

Другое отличие: difftime() возвращает результат типа с плавающей запятой double, а "-" на time_t значения дает результат типа time_t. В большинстве случаев результат будет неявно преобразован в тип того, что вы его назначили, но если time_t является целым типом без знака, вычитание более позднего времени с более раннего времени даст очень большое значение, а не отрицательное значение. Каждая система, которую я видел, реализует time_t как 32-битный или 64-разрядный целочисленный тип со знаком, но допускается использование беззнакового типа - еще одна причина, по которой простое вычитание значений time_t не имеет смысла.

Ответ 2

difftime() возвращает double с плавающей запятой, просто вычитая их, если вы не сделаете их двойными в первую очередь.
источник: здесь