Проверьте, инициализирована ли переменная time_t
- Как проверить, инициализирована ли переменная time_t?
- Если я хочу вычислить разницу двух переменных time_t с помощью функции difftime, нужно ли мне выполнять какие-либо проверки работоспособности перед вызовом?
- Кроме того, так как возвращаемое значение difftime является двойным, как я могу проверить, что это значение больше 0.0?
Спасибо
2 ответа
Как проверить, инициализирована ли переменная time_t?
Там действительно нет способа проверить, была ли она инициализирована. Если он не был инициализирован, это может быть любое случайное значение, которое случайно находилось в ячейке памяти. Вы должны программировать таким образом, чтобы вы знали, что он инициализирован.
Если я хочу вычислить разницу двух переменных time_t с помощью функции difftime, нужно ли мне выполнять какие-либо проверки работоспособности перед вызовом?
Я так не думаю. Поскольку time_t является целочисленным типом, он всегда находится в допустимом состоянии (целые числа не имеют состояний nan или inf, таких как числа с плавающей запятой), поэтому я не вижу причин, по которым вы могли бы получить недопустимый вывод. Я думаю, вы могли бы проверить, что значения time_t имеют смысл, учитывая контекст пролубема, который вы решаете. Например, не имеет смысла ссылаться на время 2000 лет назад.
Кроме того, так как возвращаемое значение difftime является двойным, как я могу проверить, что это значение больше 0.0?
Используйте оператор if. if(dt > 0.0) {...}
ПРОЧИТАЙТЕ ЭТО: cppreference страница на time_t
Очень полезная информация, поскольку cppreference также охватывает C.
В принципе,
time_t
часто реализуется как 64-разрядное целое число. Что означает, что инициализация по умолчанию такая же дляtime_t
как для старогоint
, Вам не нужно "инициализировать" его, чтобы сохранить в нем значения.Как всегда в C, вы не можете действительно проверить, не сделали ли вы какую-то неправильную операцию с целочисленным значением, которое устанавливает его на что-то практически неиспользуемое, но все еще допустимое - то есть нет, просто убедитесь, что никакие переменные не были инициализированы.
с
difftime > 0
, Почему бы это не сработало?double
может точно представлять целочисленные значения до ~100 000 000 000 000. Это разница во времени в 3 миллиона лет.