difftime的粒度

时间:2013-08-01 12:45:04

标签: c c99 language-lawyer

第7.23.2.2节 C99标准的第2和第3段中:

  

2 difftime 功能计算两个日历时间之间的差异: time1 - time0

     

3 difftime 函数以 double 的形式返回以秒为单位的差异。

C99标准似乎确实为difftime函数定义了最小粒度,只有分辨率(秒)。是否有关于difftime函数粒度的隐含保证?

我可以推断任何给定实现上的最小可能粒度取决于该实现的time_t数据类型的底层表示的粒度(因为这是传递给{{ 1}}) - 但是根据我对文本的理解,difftime不需要以最小粒度返回差异,并且实际上可以返回更大一个。

1 个答案:

答案 0 :(得分:3)

C标准没有这样的保证。 time_t具有算术类型,并且能够表示实现的日历时间的最佳近似值(具有实现定义的范围和精度)。 difftime计算两个此类time_t值之间的差异,并以秒为单位返回结果。这就是标准所保证的一切。具体来说,它没有说明difftime返回的值的粒度/精确程度(但可以合理地假设它与同一实现中的time_t类型具有相同的粒度)。

POSIX标准提供了进一步的保证,通过指定time_t来保存自纪元以来的秒数(作为整数或浮点类型) - 即。它修复了单位。同样,它没有说明粒度。

我可以想到的主要原因是这些标准都没有指定粒度,这是依赖于硬件的,并且两个标准都指定了软件的行为(可能在各种硬件上运行)。它们不控制系统时钟,因此不能对其粒度做任何假设。