4

我目前正在编写一个返回 time_t 值的 C 函数,但我也需要管理错误情况(因为该函数使用 I/O 函数)。使用 (time_t) -1 作为错误指示器是否正确?

4

4 回答 4

3

(time_t)-1函数已经使用usingtime()来报告失败,因此似乎不是一个不合理的选择:

当前日历时间编码为 time_t 对象成功, (time_t)(-1) 错误。如果参数不为 NULL,则返回值等于存储在参数指向的对象中的值。

但是,如果调用者有必要区分时间相关故障或 IO 相关故障(或特定 IO 故障),您可以考虑向函数添加状态类型参数,该参数可用于返回有关故障的附加信息。

于 2012-10-12T15:26:40.983 回答
2

是的,time_t签了。

因此,让函数返回-1以指示错误是完全可以的。

无论如何,您应该确保从 API 的逻辑中您永远不需要返回任何负时差,因为time_t能够signed表达(也是?)差异。

更新:

这仅在 POSIX 系统上得到保证。甚至存在signed误导,因为 http://pubs.opengroup.org/onlinepubs/009696699/basedefs/sys/types.h.html定义time_t为一个int 一个真正的浮动类型。

因此,在符合 POSIX 标准的系统time_t上,它能够携带负值。

于 2012-10-12T15:25:49.080 回答
2

time函数本身会在错误时返回,(time_t) -1因此 using(time_t) -1应该可以正常工作。

于 2012-10-12T15:25:51.887 回答
1

该值(time_t)-1表示 1969-12-31T23:59:59+00:00,即 The (Unix) Epoch 之前的第二个。

它是由一些标准 C 时间函数返回的,如果您可能需要处理历史时间并且需要区分实际错误和在大纪元之前偶尔出现的第二个错误,这将是一个令人困惑的麻烦。您最好使用(假设的)TIME_T_MAX 或 TIME_T_MIN 值 - 的最大或最小可能值time_t。(但请注意,距离有符号 32 位的上限仅剩 25 年左右——即time_t2038 年 1 月。)

于 2012-10-12T15:26:42.137 回答