У меня есть следующий код:
#include <stdio.h>
#include <time.h>
clock_t a;
void f(void) {
a = clock();
printf("in f(): %g\n", a);
}
void main(void) {
f();
printf("in main(): %g\n", a);
}
Скомпилировав его с помощью MinGW gcc и запустив его, вы получите примерно такой вывод:
in f(): -1.#QNAN
in main(): 1.49845e-307
Вопрос. Почему a
содержит -1.#QNAN
? Хотя я понимаю что это значит, я не вижу, что пошло не так в коде. Сначала я предположил, что это как-то связано со спецификатором формата печати для типа clock_t
, но ответы из этот поток stackoverflow говорит об обратном. Даже чтобы убедиться, я быстро покопался в стандартных заголовках и выяснил, что clock_t
— это typedef для long
(по крайней мере, на моей машине), а это значит, что в отображении значения нет ничего плохого. Может быть, это ошибка в функции clock()
?
Редактировать: сразу после прочтения комментариев я понял, что моя реальная проблема заключается в том, что я ожидал, что a
будет каким-то сверхмалым значением с плавающей запятой, настолько плохо, что я забыл, что clock_t
, как я уже сказал, определен на моя машина типа long
. Извините за беспокойство и спасибо всем за ваше время.
%g
после преобразования значения вdouble
. Вы, кажется, не делаете этого. - person Bo Persson   schedule 13.02.2018clock_t
не указан. Поэтому%g
может быть неподходящим оператором формата: en.cppreference.com/w/ cpp/хроно/c/clock_t - person Richard Critten   schedule 13.02.2018clock_t
- это целочисленный тип, а неfloat
, поэтому вы не можете использовать формат%g
для его печати, проверьтеprintf(3)
документацию на наличие допустимых спецификаторов формата. - person Luis Colorado   schedule 14.02.2018