为什么 ISO C / POSIX time() 有一个可选的指针参数

为什么 ISO C / POSIX time() 有一个可选的指针参数

ISO C/POSIX宣布像这样的函数time()

time_t time(time_t *tloc);

文档说:

time() 函数应返回自纪元以来的时间值(以秒为单位)。

tloc 参数指向也存储返回值的区域。如果 tloc 是空指针,则不存储任何值。

我不明白为什么人们从一开始就以既有返回值又有“输出”参数的方式设计 API。这样的设计是否有充分的理由,或者是历史上演变而来的?

过去是否有一个time()函数只有 out 参数 ( void time(time_t *)),但它被更改为time_t返回值,并保留第一个参数以实现向后兼容性?

或者,是否存在返回值的大小受到限制而无法容纳 的系统time_t,因此需要一个指针?

答案1

long因此,正如 MC68020 在评论中所说,C当时没有类型,我能找到的最古老的出现在库/时间.s第二版 Unix,该文件的日期为 1972-06-07,位于上面链接的网站上,来源如下(PDP-11 程序集):

/ C library -- time

/ tvec = time(tvec);
/
/ tvec[0], tvec[1] contain the time

    .globl  _time

.data
_time:
    1f
.text
1:
    mov 2(sp),r0
    sys time
    mov ac,(r0)
    mov mq,2(r0)
    rts pc

有趣的是,它似乎总是有返回值 ( tvec = time(tvec);),假设tvec是某种 16 位值的 2 分量数组(如果该赋值有任何相关性的话)。

相关内容