标头time
中的time.h
函数由POSIX定义,以返回time_t
,显然可以是带符号的int或某种浮点数。
http://en.cppreference.com/w/c/chrono/time
但是,该函数在出错时返回(time_t)(-1)
。
在time
失败的情况下?
基于签名time_t time( time_t *arg )
,似乎函数不应该分配,因此可能会导致失败。
答案 0 :(得分:4)
time()
函数实际上由ISO定义,POSIX主要推迟到该函数,除非它可能对行为和/或属性进行进一步限制(例如,如8位字节)。
并且,由于ISO C标准未指定 time()
如何失败(a),因此可能性列表不限于任何方式:
可能性实际上是无限的,当然,我的意思是“字面上”在比喻意义上而不是文字意义上: - )
POSIX本身调出显式,如果它检测到该值不适合time_t
变量,它将失败:
time()
函数可能会失败如果:[EOVERFLOW]
自Epoch以来的秒数不适合time_t
类型的对象。
而且,就在您的评论中:
根据签名
time_t time( time_t *arg )
,似乎函数不应该分配。
你需要对此保持谨慎。任何非标准规定的内容都完全可以解释。例如,我可以设想一个奇怪的实现,为NTP请求数据包分配空间到time.nist.somewhere.org
,以确保所有时间都是最新的,即使没有 NTP客户端: - )
(a)实际上,它甚至没有指定time_t
的定义是什么,因此将它限制为整数或浮动是不明智的点值,它可能是自大爆炸以来的四夜之数的字符串表示:-)所有它需要的是它可以被其他time.h
函数使用并且它可以被强制转换为-1
in失败的事件。
POSIX 表示它表示秒数(ISO没有),但没有其他限制。
答案 1 :(得分:3)
我可以想象几个原因:
arg
不为空,但指向某个非法位置。某些实现可能会检测到非法指针(或捕获生成的SEGV)而不是崩溃,而是返回错误。