如何在c中表示time_t类型的未初始化值
我有一个time_t类型变量(从<time.h>
),它存储失败的时间,并且想将它初始化为一个“null”值,该值为最终值if没有错误发生。有没有一种标准的方法将time_t变量设置为某种已知的空值?我发现如果发生错误,time()
函数返回-1,也许这是最好的,但不知道我是否可以将一个整数值分配给typedef。也许我需要用这个......?如何在c中表示time_t类型的未初始化值
time_t failTime = (time_t)(-1);
如OP称为,从失败time()
(和其它标准C库函数)的结果是(time_t)(-1)
,所以它是至少合理初始化time_t
到“失败”值。
// Just like OP
time_t failTime = (time_t)(-1);
time_t
是真正类型和“整数和实浮点类型统称真正的类型”。 time_t
可能是一个double
,long
等
严格地说time_t
可以编码一个有效时间(time_t)(-1)
,但不是来自于各种功能的错误回报区分。
考虑到可能编码的宽广范围并考虑到自1970年1月1日以来使用整数秒的常见做法,所以(time_t)(-1)
是合理的选择。
更强大的(或迂腐的解决方案)会将标记与时间变量配对以指示其正确性。例如:
struct time_pedantic {
time_t t;
bool valid;
}
十1 for更强大的解决方案。 –
如果你坚持的东西需要依赖于什么,但基本的C语言,你最好的办法是在你实际上并不需要代表过去远远选择一个时间,设置它在struct tm
,并转换为time_t
与mktime
。您可能必须循环并重试,直到找到可成功转换的值。典型的系统有一个以1970年为中心的大约+/- 68年的可表示时间范围,但你不一定假设你的确如此。
另一方面,如果您使用的是POSIX或POSIX类实现,则可以假设time_t
是代表伪UTC的算术类型(更像UT1或称为“云 - UTC”)秒自1970年开始。然后,您可以在time_t
类型的范围内选择一个较大的负整数值。
这里http://*.com/questions/471248/what-is-ultimately-a-time-t-typedef-to接受的答案表示“ISO C time_t的定义为一个算术类型,但并未指定任何特定的类型,范围,分辨率或编码,也未指定应用于时间值的算术运算的含义。“所以它听起来像是不标准的,不管你的解决方案是什么。 –
'time_t failTime = -1;'除非代码试图与'time_t'的其他负值一起工作 - 这很少见。 – chux
我想没有理由来投射整数立即数 – robisrob