2016-07-22 2 views
0
  • Как проверить, инициализирована ли переменная time_t?
  • Если я хочу вычислить разницу в двух часах time_t с функцией difftime, нужно ли мне вручную выполнять любые проверки работоспособности перед вызовом?
  • Кроме того, поскольку возвращаемое значение difftime является двойным, как я могу проверить, что это значение больше 0.0?

БлагодаряПроверить инициализацию переменной time_t

+0

Если вы делаете кодирование, вы должны знать, инициализирована ли переменная. Иначе, как общий принцип, проверки здравомыслия всегда являются вашей ответственностью, если вы не полностью контролируете ввод. Чтобы проверить значение больше 0.0, сделайте, если (difftime (t2, t1)> 0.0) {// ваш код}. –

ответ

1

Как проверить, является ли переменная time_t инициализируется?

На самом деле не существует способа проверить, была ли она инициализирована. Если он не был инициализирован, это может быть любое случайное значение, которое, как оказалось, находится в ячейке памяти. Вы должны запрограммировать так, как вы знаете, он инициализирован.

Если я хочу, чтобы вычислить разность двух time_t вары с функцией difftime, мне нужно вручную выполнить любое здравомыслие проверки перед тем invokation?

Я так не считаю. Так как time_t является целым типом, он всегда находится в правильном состоянии (целые числа не имеют состояния наном или inf, например, плавающие точки), поэтому я не вижу причин, по которым вы получите недопустимый вывод. Я думаю, вы могли бы проверить, что значения time_t имеют смысл с учетом контекста проббэма, который вы решаете. Например, может быть бессмысленно иметь дело со временем 2000 лет назад.

Кроме того, поскольку возвращаемое значение difftime является двойным, как я могу проверить, что это значение больше 0,0?

Используйте инструкцию if. if(dt > 0.0) {...}

+0

Проверка соответствия: возможно, 't! = -1'. -1 - это возвращаемое значение ошибки из 'time()'. BTW 'time_t' является _not_, определяемым C, как целочисленное значение. Он должен быть целым или FP-типом. – chux

0

прочитать: cppreference page on time_t

Очень полезная информация, поскольку cppreference также охватывает С.

  1. В основном, time_t часто реализуется в виде 64-разрядного целого числа. Это означает, что инициализация по умолчанию такая же для time_t, как и для старых старых int. Вам не нужно «инициализировать» его, чтобы хранить в нем значения.

  2. Как всегда в C, вы не можете проверить, не сделали ли вы какую-то плохую операцию на целочисленном значении, которое устанавливает его на что-то практически непригодное, но все еще действительное - то есть нет, просто убедитесь, неинициализированный.

  3. с difftime > 0. Почему это не сработает? double может точно представлять целочисленные значения до ~ 100 000 000 000 000. Это разница во времени в 3 миллиона лет.

+0

«В принципе, time_t часто реализуется как 64-разрядное целое». C позволяет использовать многие другие типы, включая FP. – chux

+0

@chux не имеет отношения к делу. Кроме того, я использовал «часто», не всегда. –

Смежные вопросы