检查time_t变量初始化
- 如何检查time_t变量是否被初始化?
- 如果我想使用difftime函数计算两个time_t变量的差异,是否需要在调用之前手动执行任何健全性检查?
- 另外,由于difftime返回值是双精度型,我该如何检查该值是否大于0.0?
如何检查是否一个time_t的变量初始化?
确实没有办法检查它是否已经初始化。如果它没有初始化,它可以是任何发生在内存中的随机值。您应该按照您知道它已初始化的方式进行编程。
如果我想计算两个time_t的的差异瓦尔与 difftime功能,我需要invokation之前,需要手动执行任何完整性检查 ?
我不这么认为。由于time_t是一个整数类型,它总是处于有效状态(整数没有nan或inf状态,比如浮点数),所以我没有理由会得到无效的输出。我想你可以根据你正在解决的prolbem的上下文来检查time_t的值是否有意义。比如2000年前的某个时间可能没有意义。
此外,由于difftime返回值是双,我怎么检查 该值大于0.0?
使用if语句。 if(dt > 0.0) {...}
理智检查:也许't!= -1'。 -1是'time()'的错误返回值。顺便说一下,'time_t'不是由C定义的整数值。它必须是一些整数或FP类型。 – chux
READ THIS:cppreference page on time_t
非常有用的信息,因为cppreference还覆盖C.
基本上,
time_t
常常被实现为64位整数。这意味着time_t
的默认初始化与普通旧版int
相同。您不必“初始化”它来存储值。和C一样,你不能真正地检查你是否对一个整数值做了一些不好的操作,把它设置成实际上不可用但仍然有效的 - 意思是否定的,只是确保不让任何变量去初始化。
与
difftime > 0
。为什么它不起作用?double
可以精确地表示高达〜100,000,000,000,000的整数值。这是300万年的时间差。
“基本上,time_t通常以64位整数实现。” C允许包括FP在内的许多其他类型。 – chux
@chux无关紧要。另外,我常常使用“经常”,而不是总是。 –
如果你是一个正在编码的人,你应该知道一个变量是否被初始化。否则,作为一般原则,如果您不完全控制输入,则健全性检查始终是您的责任。要检查是否大于0.0,请执行if(difftime(t2,t1)> 0.0){//您的代码}。 –