标准库和POSIX之间的时钟功能

时间:2013-09-08 03:05:17

标签: c posix standard-library

在POSIX 2008中clock函数定义的一部分:

  

clock()返回的值可能会包含在某些实现中。

  

CLOCKS_PER_SEC被定义为<time.h>中的一百万。

在C标准clock函数中有重要的注意事项:

  

为了测量程序所花费的时间,应该在程序开始时调用时钟函数,并从后续调用返回的值中减去其返回值。

  

CLOCKS_PER_SEC:扩展为类型为clock_t的表达式(如下所述),该表达式是时钟函数返回的每秒数。

在POSIX中,他们说POSIX标准中的信息与c标准一致但是在c标准中CLOCKS_PER_SEC是实现定义的,与POSIX不同,它具有一个值,在C标准中不应该发生包装 - 从用于计算应用程序运行时间的示例 - 但在POSIX中,他们说包装将每36分钟发生一次。

当我使用c编译器时 - 例如Gcc,Clang甚至是I.C.L. - 在Linux中,clock返回值是否包装或不知道POSIX和c标准使用相同的标题time.h

注意:可以使用任何平台代替Linux,我在这里用它来举例。

由于

2 个答案:

答案 0 :(得分:1)

这是POSIX中的错误。它已被报告,已解决,并将在下一版本中修复。请参阅:http://austingroupbugs.net/view.php?id=686

我怀疑要修复所有错误的实施需要花费更长的时间。

答案 1 :(得分:0)

POSIX要求与C标准中的要求保持一致,但更严格。

C标准要求编译器定义CLOCKS_PER_SEC。 POSIX也是如此,但它说它必须有一个特定的值。

C标准并没有真正说出关于环绕的内容 - 没有直接声明它可以包装,但也没有禁止说它不能。考虑到有限的尺寸,它最终会不可避免地包裹起来。