我有以下代码:
#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
?虽然我理解what it means,但我没有看到代码中出现了什么问题。起初,我推测它与类型clock_t
的打印格式说明符有关,但this stackoverflow thread的答案则另有说明。即使为了确保,我在标准标题中进行了快速挖掘,发现clock_t
是long
的typedef(至少在我的机器上),这意味着没有任何问题。显示值。它可能是clock()
函数中的错误吗?
编辑:在阅读完评论之后,我意识到我的实际问题是我希望a
成为一些超小的浮点值,以至于我忘了{{正如我所说,1}}在我的机器上定义为类型clock_t
。很抱歉打扰你,感谢大家的时间。
答案 0 :(得分:2)
请始终查看您的编译器警告:
warning: format specifies type 'double' but the argument has type
'clock_t' (aka 'unsigned long') [-Wformat]
printf("in f(): %g\n", a);
~~ ^
%lu
编译器甚至会告诉您如何修复。简而言之,当数据为double
时,您无法指定printf()
到unsigned long
。
答案 1 :(得分:2)
%g
用于打印浮点数,但是您传递了clock_t
(可以是任何算术类型;例如32位整数)。
如果您想使用double
:
%g
printf("in main(): %g\n", static_cast<double>(a));