我一直很好奇,为什么time(time_t *)
函数都返回time_t
,并将时间设置为传入的指针?
返回时间的示例:
time_t myTime = time(NULL);
printf("The time is now %s", ctime(&myTime));
将值设置为指针的示例:
time_t myTime;
time(&myTime);
printf("The time is now %s", ctime(&myTime));
我原本以为通过写入内存而不是返回会有性能提升,但是如果它必须同时执行这两种操作,那是不是只会让它变慢?
答案 0 :(得分:16)
目前定义的方式没有任何实际好处。
我怀疑当第一次定义time()
函数时,它使用了一个无法从函数返回的类型。很早的C实现没有long int
,并且无法从函数返回结构。在具有16位整数的系统上,表示时间的唯一方法是作为结构或数组; 16位的秒数不到一天。
time()
的早期实现可能已经被用过这样的东西(推测):
time_t now;
time(&now); /* sets now.time_high, now.time_low */
或者也许:
int now[2];
time_t(now); /* sets now[0], now[1] */
当后来的C实现添加更长的整数并且能够按值返回结构时,添加了从time_t
函数返回time()
值的功能,但保留了旧功能以避免破坏现有代码。
我认为如果今天定义time()
,它看起来会更像这样:
time_t time(void);
我无法确认time()
函数的旧实现是否以这种方式工作(尝试使用Google搜索“时间”!),但考虑到语言的历史,这是有道理的。
如果将空指针传递给time()
函数,它将返回当前时间而不将其存储在变量中;这避免了一些性能损失:
time_t now = time(NULL);
答案 1 :(得分:7)
它允许您在另一个表达式中嵌套对time()
的调用,而不是在单独的语句中执行:
time_t x = time(&now) + more_time;
上述声明完成后,now
应包含当前时间,x
应包含当前时间加上一些值。
strcpy
属于同一种情况,因为它返回已作为目标传递的相同char *
指针,因此也可以嵌套它:
printf("Copied string is %s", strcpy(dst, src));