一种在C中使用time_t函数返回错误的方法

时间:2012-10-12 15:22:33

标签: c time-t

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

4 个答案:

答案 0 :(得分:3)

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

  

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

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

答案 1 :(得分:2)

是的,time_t已签名。

因此,完全可以使函数返回-1来指示错误。

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

<强>更新

仅在POSIX系统上有保证。偶数signed会产生误导,因为http://pubs.opengroup.org/onlinepubs/009696699/basedefs/sys/types.h.htmltime_t定义为int 实际浮动类型。

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

(time_t)-1表示1969-12-31T23:59:59 + 00:00,是(Unix)纪元之前的第二个。

它是由一些标准C时间函数返回的,如果您可能需要处理历史时间并且需要区分实际错误和偶尔出现在Epoch之前的第二个函数,这是一个混乱的麻烦。您可以使用(假设的)TIME_T_MAX或TIME_T_MIN值(time_t的最大或最小可能值)做得更好。 (但请注意,在签名的32位time_t的上限之前,仅剩25年左右 - 在2038年1月。)