gpt4 book ai didi

clock_t 除法结果为 0

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:17 26 4
gpt4 key购买 nike

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

最佳答案

CLOCKS_PER_SEC/CLOCKS_PER_BLINK 宏评估/编译为:CLOCKS_PER_SEC/CLOCKS_PER_SEC/4L,运行时给出 1/4,由于整数除法而给出 0 .

您需要括号才能使其按预期工作:CLOCKS_PER_SEC/(CLOCKS_PER_BLINK),或者按照 alk 的建议,调整宏以使用括号:#define CLOCKS_PER_BLINK (CLOCKS_PER_SEC/4L)

这里的问题是宏的计算非常字面意思,这就是为什么你不应该做像在其中放分号这样的事情。它们基本上是查找和替换或复制意大利面,因此在使用它们时要格外小心。

关于clock_t 除法结果为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26125148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com