c - difftime的粒度

标签 c c99 language-lawyer

在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 a double.

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/

相关文章:

C: 类型转换警告

c - C语言中的optopt和getopt

c - 什么时候抛弃 const 合法还是非法? (gcc、clang 和 MSVC)

c - 正在打印的结构中我的 int** 的垃圾输出

c - C 中的最小保证常量折叠

html - 从查询字符串中提取整数

c - 为什么 sscanf 不读取格式字符串中的第一个参数?

c - ANSI C 和 C99 文字前缀和后缀列表

c - 定义为宏的标准库函数的参数类型错误

c++ - 是否在特定实现上定义了两个数组之间的指针差异?