2

找出一个有效的值范围似乎非常困难time_t

它在某些 32 位平台上,在大多数 64 位平台上,因此可以很容易地设置为LONG_MAX. 但是,尝试使用该值并不能真正正常工作。例如,您不能将其传递给localtime并将其更改为struct tm.

一个对值进行二分搜索的快速测试程序告诉我它是 67768036191676799。这对应于年末 2147483647,因此作为一个值是有意义的。但是,这是在任何地方指定的吗?对于最大可用 time_t,是否有任何合理的、独立于平台的值?

4

3 回答 3

1

实际上,time_t 和 clock_t 的规范是实现定义的(C99 7.23.1)。

这是我建议不要自己生成这些值的事情之一,而是依靠实现为您创建它们,例如 with mktime(),并使用struct tmfor 直接操纵时间。-1是 time_t 的唯一值,它是您可以自己使用的“好”值。

我特别建议您不要将其视为任何类型的 32 位值,正如 jgm 所建议的那样。你永远不知道一些奇怪的嵌入式编译器是否会想要使用 16 位时间或 18 位时间,或者谁知道呢。

于 2013-02-07T17:37:42.637 回答
0

使用它的最安全方法是 32 位签名,只要您对它在 25 年后不再工作感到满意。

否则,您将不得不在您运行的任何平台上自己测试类型并采取相应措施。

于 2013-02-07T17:27:40.303 回答
0

tm_year有类型int,所以如果你要转换成struct tm,最大的意义time_t就是 year 对应的值INT_MAX

于 2013-02-07T17:47:47.617 回答