我正在编写一个返回time_t值的C函数,但我需要管理错误情况(因为此函数使用I / O函数)。 使用(time_t)-1作为错误指示符是否正确?
答案 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.html将time_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月。)