start - end
是从较小的时间中减去较大的时间,因此为什么您会得到负值。这就像问为什么当你从三中减去七时你会得到一个负值:-)
你需要从中start
减去end
。
顺便说一句,不能保证clock_t
和CLOCKS_PER_SEC
是浮点类型。如果它们是整数类型,您可能会得到整数除法。如果您真的想要一个浮动值,请使用以下内容:
(double)(end - start) / CLOCKS_PER_SEC
您的代码中还有其他一些小问题,没什么大不了的,但在我看来,更简洁的实现将遵循以下几行:
#include <time.h>
#include <stdio.h>
int main (void) {
clock_t duration = clock();
for (int i = 0; i < 1000; i++)
printf ("%d\n", i);
duration = clock() - duration;
printf ("%0.2f seconds\n", (double)(duration) / CLOCKS_PER_SEC);
return 0;
}
顺便说一句,在现代系统上输出一千行可能需要大约零秒的 CPU 时间。我假设您的有效负载会稍微复杂一些,但如果上面的代码完全不占用 CPU 时间(至少到小数点后两位),请不要感到惊讶。事实上,我必须将循环乘以 100 才能在我的系统上达到 0.3 秒。
并且不要认为使用类似的东西可以获得更长的持续时间,sleep()
因为这几乎肯定不会使用任何 CPU 时间。