考考你!time_t time(time_t*)函数为何用如此怪异的方式返回时间?

hhddz 2010-11-21 09:38:29
time_t time(time_t*);是标准C函数的原型。函数的返回值和指针参数的返回值一样。

显然,函数的参数是不必要的。更好的函数原型应该设计为:time_t time();

time_t curTime = time();显然比 time_t curTime = time(NULL);更容易理解。

但是,C语言标准却选择了前一种比较奇怪的函数原型。

你知道为什么要这么设计吗?

50楼公布答案。


...全文
1691 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2013-07-18
  • 打赏
  • 举报
回复
2010年的贴, 2年了, 终于够50楼了, 看楼主还是否在世.
LubinLew 2013-07-18
  • 打赏
  • 举报
回复
一根烂笔头 2013-07-18
  • 打赏
  • 举报
回复
据我估计有两点 1。设置指定的时间 2。c语言是面向过程的,不是面向对象的语言,没有this指针,有些情况下要用到自身
一根烂笔头 2013-07-18
  • 打赏
  • 举报
回复
lz失言了
水平不流 2013-07-18
  • 打赏
  • 举报
回复
尼玛直奔50楼. 结果发现惊天秘密!!
AnYidan 2013-07-16
  • 打赏
  • 举报
回复
引用 40 楼 lishanchao 的回复:
我怎么感觉是在C语言开始标准化的时候为了照顾旧代码所做的妥协。 标准化之前,各个系统的实现可能不同,有的系统是:time_t time(void) 而有的系统是:void time(time_t *t) 那么time_t time(time_t *t)的实现便可以兼顾两种旧有代码。 另外,为了照顾旧有代码,C库中其实还有一些不合适的地方【1】。比如文件函数一族,有的把FILE *fp放在开头,有的放在结尾,这种不一致使得学习起来略显困难。比如fwrite和fseek放在一起比较,设计者不觉得@#¥%么? size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *stream) int fseek(FILE *stream, long offset, int origin) 【1】这个只是个人观点,到底是什么原因,文件函数API被设计成这样,我也没找到可信的源头。
照顾旧代码所做的妥协++
Yeah 2013-07-16
  • 打赏
  • 举报
回复
肯定不是线程安全的原因。
LubinLew 2013-07-16
  • 打赏
  • 举报
回复
历史原因
vnvlyp 2013-07-16
  • 打赏
  • 举报
回复
我觉得20L和40L的解释比较靠谱。。 话说LZ还在不在啊。。。
Panda_熊猫 2012-11-01
  • 打赏
  • 举报
回复
这论坛真冷
Panda_熊猫 2012-11-01
  • 打赏
  • 举报
回复
为了方便传指针
h123456hxd 2012-11-01
  • 打赏
  • 举报
回复
我觉得可能与程序本身有关吧
清竹小雨 2012-05-05
  • 打赏
  • 举报
回复
我也看不明白,即使有答案,层次还不够
沭水河畔 2012-05-05
  • 打赏
  • 举报
回复
我怎么感觉是在C语言开始标准化的时候为了照顾旧代码所做的妥协
标准化之前,各个系统的实现可能不同,有的系统是:time_t time(void)
而有的系统是:void time(time_t *t)
那么time_t time(time_t *t)的实现便可以兼顾两种旧有代码。

另外,为了照顾旧有代码,C库中其实还有一些不合适的地方【1】。比如文件函数一族,有的把FILE *fp放在开头,有的放在结尾,这种不一致使得学习起来略显困难。比如fwrite和fseek放在一起比较,设计者不觉得@#¥%么?
size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *stream)
int fseek(FILE *stream, long offset, int origin)
【1】这个只是个人观点,到底是什么原因,文件函数API被设计成这样,我也没找到可信的源头。
i_Android 2012-05-03
  • 打赏
  • 举报
回复
还有希望吗,想知道结果
redshiliu 2012-02-12
  • 打赏
  • 举报
回复
真能挖坟啊,另外说个菜鸟的想法,类似和string.h里面库函数差不多
传的参数是一个缓冲区用来存放操作结果,函数返回值只是和缓冲区指
向了同一个地址,如果没有缓冲区,难道你让库函数在里面给你malloc
一块然后返回指针?这样你还需要在外部fee一下,不好用啊。
氰客 2012-02-11
  • 打赏
  • 举报
回复
谁把这帖子找出来的、、
huhaifengasd 2012-02-11
  • 打赏
  • 举报
回复
。。。。。。狂汗
heartszhang 2012-02-09
  • 打赏
  • 举报
回复
。。挖坟啊。2010年的帖子。楼主都不在了吧。
  • 打赏
  • 举报
回复
20楼
加载更多回复(29)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧