我正在尝试在 C 程序中获得一些基本时间。
基本上我想在规定的时间内每秒翻转一下几次。
我的问题是除法似乎没有适当的变量
clock_t
类型。
这是一个显示问题的最小程序,我用两者测试了它 GCC和clang:
#include <time.h>
#include <stdio.h>
#define CLOCKS_PER_BLINK CLOCKS_PER_SEC / 4L
int main() {
printf("%li\n", CLOCKS_PER_SEC);
printf("%li\n", CLOCKS_PER_BLINK);
printf("%li\n", 4L);
printf("%li\n", CLOCKS_PER_SEC/CLOCKS_PER_BLINK);
}
这是输出:
$ ./a.out
1000000
250000
4
0
我原本希望最后一行返回4
。
答案 0 :(得分:2)
CLOCKS_PER_SEC/CLOCKS_PER_BLINK
宏评估/编译为:CLOCKS_PER_SEC / CLOCKS_PER_SEC / 4L
,在运行时,给出1/4,由于整数除法,得到0。
您需要括号才能按预期工作:CLOCKS_PER_SEC/(CLOCKS_PER_BLINK)
,或者如建议的那样,调整宏以使用括号:#define CLOCKS_PER_BLINK (CLOCKS_PER_SEC / 4L)
这里的问题是宏的字面意思非常好,这就是为什么你不应该做像分号一样的事情。他们基本上找到并替换或复制,所以在他们周围要特别小心。