【发布时间】:2011-11-24 21:39:40
【问题描述】:
我学习了一些基本的C函数,并在一些手册中遇到了time(NULL)。
这到底是什么意思?
【问题讨论】:
我学习了一些基本的C函数,并在一些手册中遇到了time(NULL)。
这到底是什么意思?
【问题讨论】:
对time(NULL) 的调用返回当前日历时间(自 1970 年 1 月 1 日以来的秒数)。有关详细信息,请参阅this reference。通常,如果您传入一个指向time_t variable 的指针,该指针变量将指向当前时间。
【讨论】:
time_t 类型的变量timer,time(&timer); 等价于timer = time(NULL);
您可以传入一个指向time_t 对象的指针,time 将用当前时间填充该对象(返回值与您指向的相同)。如果你传入NULL,它只是忽略它,只返回一个新的time_t 对象,表示当前时间。
【讨论】:
time 函数返回当前时间(作为 time_t 值),以秒为单位(在 Unix 系统上,自 UTC 时间 1970 年 1 月 1 日午夜开始),它接受一个参数,time_t 指针其中存储时间。将NULL 作为参数传递会导致time 将时间作为正常返回值返回,但不会将其存储在其他任何地方。
【讨论】:
您必须参考documentation for ctime。 time 是一个函数,它接受一个time_t * 类型的参数(指向time_t 对象的指针)并为其分配当前时间。除了传递这个指针,你也可以传递NULL,然后使用返回的time_t值来代替。
【讨论】:
ctime是C++头<ctime>,与C头<time.h>类似。 (问题是关于 C,而不是 C++。)还有一个名为 ctime 的函数。
Time :它返回自 1970 年 1 月 1 日以来经过的时间(以秒为单位)
【讨论】:
您可以传入指向time_t 对象的指针,该对象的时间将被当前时间填满(返回值与您指向的相同)。如果你传入NULL,它就会忽略它,只返回一个新的time_t 对象,它代表当前时间。
Nb:time(&timer); 等价于timer = time(NULL);
【讨论】:
int main (void)
{
//print time in seconds from 1 Jan 1970 using c
float n = time(NULL);
printf("%.2f\n" , n);
}
这会打印 1481986944.00(此时)。
【讨论】:
time返回time_t,存储到float时会丢失精度。
[从duplicate, now-deleted question复制的答案。]
time() 是一个非常非常古老的函数。它可以追溯到 C 语言甚至没有类型 long 的那一天。曾几何时,获得类似 32 位类型的唯一方法是使用包含两个 ints 的数组——那时 ints 是 16 位。
所以你打电话
int now[2];
time(now);
它将 32 位时间填充到 now[0] 和 now[1],一次 16 位。 (这解释了为什么其他与时间相关的函数,例如 localtime 和 ctime,也倾向于通过指针接受它们的时间参数。)
后来,dmr 完成了将long 添加到编译器,所以你可以开始说
long now;
time(&now);
后来,有人意识到如果 time() 继续返回值而不是仅仅通过指针填充它会很有用。但是——向后兼容是一件很棒的事情——为了所有仍在执行time(&now) 的代码,time() 函数必须继续支持指针参数。这就是为什么——这就是为什么向后兼容并不总是那么美好的事情,毕竟——如果你使用返回值,你仍然必须将 NULL 作为指针传递:
long now = time(NULL);
(当然,后来我们开始多次使用time_t而不是普通的long,例如,可以将其更改为64位类型,避开y2.038k problem。)
[附注我实际上不确定从int [2] 到long 的更改以及添加返回值的更改发生在不同的时间;它们可能同时发生。但请注意,当时间表示为数组时,它必须通过指针填充,它不能作为值返回,因为当然 C 函数不能返回数组。 ]
【讨论】:
time_t 的错误,如果你传入一个非 NULL 参数,它只会填充低 32 位而高位不变。