【发布时间】:2015-01-15 03:25:11
【问题描述】:
我不明白为什么 fputs 和 fprintf 反向流顺序。
int fputs (const char * str, FILE * stream);
int fprintf (FILE * stream, const char * format, ...);
ssize_t write(int fd, const void *buf, size_t count);
我知道 fprintf 把流放在前面支持可变参数,但是为什么 fputs 系列不保持一致性 ???
【问题讨论】:
-
发生在很久以前,我不确定是否有人可以绝对肯定地给出答案。我个人认为
printf是出于必要(正如您已经指出的那样)并且fputs那时可能已经建立,因此将其反转以匹配被认为是站不住脚的。 -
Scott Meyers 刚刚发表了关于 API 设计的演讲,他强调这个确切的例子是“做错了”[youtube.com/watch?v=5tg1ONG18H8]。
-
stdio总的来说是一个设计不佳的库:还有很多其他问题。 -
@EJP:我认为“设计不佳”是相当修正主义的历史。它比当时的大多数其他人都好,并且许多人现在可能认为“优越”的设计在当时的机器上可能根本站不住脚(即使手机现在有更多的内存和比设计时速度最快的大型机还要快)。
-
@JerryCoffin 一点也不。我记得我在 1979 年第一次看到它时是这样想的。例如:
fwrite()中的 size 参数意味着如果有部分写入,它不能告诉你写入了多少字节,只有多少元素,所以你可以永远不知道部分元素写入。最好省略它。将FILE *参数放在末尾而不是开头是另一个示例。当时有设计更好的 API。