2

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

2 该difftime函数计算两个日历时间之间的差异:time1 - time0

3difftime函数返回以秒表示的差值作为double.

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

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

4

1 回答 1

3

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

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

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

于 2013-08-01T13:16:48.470 回答