为什么time(time_t *)函数都返回并设置by-ref?

我一直很好奇,为什么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)); 

我原本以为通过写入内存而不是返回会有性能提升,但是如果它必须同时执行这两种操作,那不就是让它变慢吗?

它目前定义的方式没有任何实际好处。

我怀疑当首次定义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()函数返回time_t值的能力,但保留旧function以避免破坏现有代码。

我认为如果今天定义time() ,它看起来会更像这样:

 time_t time(void); 

我无法确认time()函数的旧实现是否以这种方式工作(尝试使用Google搜索“时间”!),但鉴于语言的历史,它是有意义的。

如果将空指针传递给time()函数,它将返回当前时间而不将其存储在变量中; 这避免了一些性能损失:

 time_t now = time(NULL); 

它允许您在另一个表达式中嵌入对time()的调用,而不是在单独的语句中执行它:

 time_t x = time(&now) + more_time; 

当上述语句结束时, now应该包含当前时间,并且x应该包含当前时间加上一些值。

strcpy属于同一种情况,因为它返回已作为目标传递的相同char *指针,因此嵌套也是可能的:

 printf("Copied string is %s", strcpy(dst, src));