在第7.23.2.2节 C99标准的第2和第3段中:
2
difftime
功能计算两个日历时间之间的差异:time1 - time0
。3
difftime
函数以double
的形式返回以秒为单位的差异。
C99标准似乎确实为difftime
函数定义了最小粒度,只有分辨率(秒)。是否有关于difftime
函数粒度的隐含保证?
我可以推断任何给定实现上的最小可能粒度取决于该实现的time_t
数据类型的底层表示的粒度(因为这是传递给{{ 1}}) - 但是根据我对文本的理解,difftime
不需要以最小粒度返回差异,并且实际上可以返回更大一个。
答案 0 :(得分:3)
C标准没有这样的保证。 time_t
具有算术类型,并且能够表示实现的日历时间的最佳近似值(具有实现定义的范围和精度)。 difftime
计算两个此类time_t
值之间的差异,并以秒为单位返回结果。这就是标准所保证的一切。具体来说,它没有说明difftime
返回的值的粒度/精确程度(但可以合理地假设它与同一实现中的time_t
类型具有相同的粒度)。
POSIX标准提供了进一步的保证,通过指定time_t
来保存自纪元以来的秒数(作为整数或浮点类型) - 即。它修复了单位。同样,它没有说明粒度。
我可以想到的主要原因是这些标准都没有指定粒度,这是依赖于硬件的,并且两个标准都指定了软件的行为(可能在各种硬件上运行)。它们不控制系统时钟,因此不能对其粒度做任何假设。