为什么fputs和fprintf反向流顺序

qia*_*ong 9 c printf fputs

我不明白为什么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);
Run Code Online (Sandbox Code Playgroud)

我知道fprintf把stream放在前面以支持变量参数,但为什么fputs系列不保持一致性???

pax*_*blo 6

因为这些东西是几十年前写的,所以通常只是历史学家感兴趣的问题:-)

可能只是一个设计决策(或缺乏决策)导致他们这样,并且,由于ISO值向后兼容,他们从未改变它.

可能puts首先编写的,当它写入时fputs,开发人员只需将其"删除",将新参数添加到最后.即使存在相同的情况printf/fprintf,由于需要将变量参数列表放在最后,这是不可能的.

但是,假设一边,既然我们心爱的丹尼斯已经走了,我们可能永远不会知道实际的原因.

  • @JerryCoffin我已经朝这个方向做了一些研究.我相信`fputs`,`fread`和`fprintf`中的参数顺序是在1979年的[Unix v7](http://cm.bell-labs.com/7thEdMan/v7vol1.pdf)中投入的,因为在[Unix v1 in 1971](http://man.cat-v.org/unix-1st/3/getw)中通过[Unix v6 in 1975](http://wwwlehre.dhbw-stuttgart.de/~ helbig/os/v6/doc/0/index.html)I/O原语大致不变且相当原始:`getw/getc/getchar/putc`等.所以,如果他们确实是莱斯克的作品,那么他1972年的备忘录需要7年时间才能完成.`fputs`可能来源于`putc(c,iobuf)`. (5认同)
  • 愿上帝保佑丹尼斯!我只是对此感兴趣。我一直相信这是有原因的。也许你是对的!谢谢你的回答! (2认同)