clock_t除法结果为0

时间:2014-09-30 15:58:15

标签: c c-preprocessor

我正在尝试在 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

1 个答案:

答案 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)

这里的问题是宏的字面意思非常好,这就是为什么你不应该做像分号一样的事情。他们基本上找到并替换或复制,所以在他们周围要特别小心。