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