在C99标准的第7.23.2.2第2段和第3段中:
2 The
difftime
function computes the difference between two calendar times:time1 - time0
.3 The
difftime
function returns the difference expressed in seconds as adouble
.
C99 标准似乎确实为 difftime
函数定义了最小粒度,仅为分辨率(秒)。关于 difftime
函数的粒度是否有任何隐式保证?
我可以推断,任何给定实现的最小可能粒度取决于该实现的time_t
数据类型的底层表示的粒度(因为这是传递的)到 difftime
) - 但根据我对文本的理解,difftime
不需要返回该最小粒度的差异,并且可以事实上,返回率更大。
最佳答案
C 标准不提供此类保证。 time_t
具有算术类型,并且能够表示实现的日历时间的最佳近似值(具有实现定义的范围和精度)。 difftime
计算两个这样的 time_t
值之间的差异,并以秒为单位返回结果。这就是标准所保证的全部内容。具体来说,它没有说明 difftime
返回的值的粒度/精确度如何(但可以合理地假设它与同一实现上的 time_t
类型具有相同的粒度) )。
POSIX 标准提供了进一步的保证,通过指定 time_t
来保存自纪元以来的秒数(作为整数或浮点类型) - 即。它修复了设备。同样,它没有说明任何有关粒度的信息。
我认为这两个标准都没有指定粒度的主要原因是,这都依赖于硬件,并且这两个标准都指定了软件的行为(可能在各种硬件上运行)。他们不控制系统时钟,因此无法对其粒度做出任何假设。
关于c - difftime的粒度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17994457/