В настоящее время я пишу функцию C, которая возвращает значение time_t, но мне также нужно обрабатывать случаи ошибок (поскольку эта функция использует функции ввода-вывода). Правильно ли использовать (time_t) -1 в качестве индикатора ошибки?
Способ вернуть ошибку с помощью функции time_t в C
Ответы (4)
Использование (time_t)-1
уже используется функцией time()
для сообщения об ошибке, поэтому это не кажется необоснованный выбор:
Текущее календарное время, закодированное как объект time_t в случае успеха, (time_t)(-1) в случае ошибки. Если аргумент не равен NULL, возвращаемое значение равно значению, хранящемуся в объекте, на который указывает аргумент.
Однако, если вызывающей стороне необходимо различать сбой, связанный со временем, или сбой, связанный с вводом-выводом (или конкретные сбои ввода-вывода), вы можете рассмотреть возможность добавления в функцию аргумента типа состояния, который можно использовать для возврата дополнительной информации об ошибке.
Сама функция time возвращает (time_t) -1
при ошибке, поэтому использование (time_t) -1
должно работать нормально.
Да, time_t
подписано.
Так что совершенно нормально заставить функцию возвращать -1
, чтобы указать на ошибку.
В любом случае, вы должны убедиться, что из логики вашего API вам никогда не нужно возвращать отрицательную разницу во времени, поскольку time_t
является signed
, чтобы иметь возможность выражать (также?) различия.
Обновление:
Это гарантируется только в системах POSIX. Даже там signed
вводит в заблуждение, поскольку http://pubs.opengroup.org/onlinepubs/009696699/basedefs/sys/types.h.html определяет time_t
как тип int
или с плавающей запятой.
Таким образом, в системах, соответствующих стандарту POSIX, time_t
может принимать отрицательные значения.
difftime()
для вычисления разницы между двумя значениями time_t
; он возвращает double
. На практике этим мало кто заморачивается.
- person Jonathan Leffler; 12.10.2012
time_t
любым другим способом. @ДжонатанЛеффлер
- person alk; 12.10.2012
time_t
не обязательно является целым числом со знаком. См. стандарт C.
- person Alexey Frunze; 13.10.2012
Значение (time_t)-1
указывает на 1969-12-31T23:59:59+00:00, за секунду до эпохи (Unix).
Его возвращают некоторые стандартные функции времени C, что доставляет неудобства, если вам может понадобиться работать с историческим временем и различать фактическую ошибку и случайное появление секунды перед Эпохой. Лучше использовать (гипотетические) значения TIME_T_MAX или TIME_T_MIN — максимальное или минимальное возможное значение time_t
. (Но имейте в виду, что осталось всего 25 лет или около того, прежде чем наступит верхний предел для 32-битного time_t
со знаком — в январе 2038 года.)
time()
, так что это не должно быть слишком неправильно. - person Daniel Fischer   schedule 12.10.2012