一致性是代码库中的基本属性,更不用说最终被证明是世界上使用最多的编程语言。
C语言中有两类I / O函数:格式化和未格式化。这些是:
int fprintf(FILE *stream, const char *format, ...);
int vfprintf(FILE *stream, const char *format, va_list ap);
和
int fputc(int c, FILE *stream);
int fputs(const char *s, FILE *stream);
int putc(int c, FILE *stream);
*fprintf
似乎用于(where, what)
排序,而*put*
用于(what, where)
;同样适用于输入功能。为什么 stream
参数位于不同位置?这种选择有没有历史 / 设计动机?
答案 0 :(得分:1)
fprintf
系列没有好的选择,因为采用变量参数列表的函数需要在可变参数部分之前采用其参数的“固定”部分:
stream
中间粘贴fprintf(const char *format, FILE *stream, ...)
将与printf
不一致,其中格式化的值会立即跟随格式字符串。它也会与fputc
家庭保持一致。stream
粘贴到可变参数部分,就像在fprintf(const char *format, ...)
中一样,理论上是可行的,但效率很低,因为在开始写入之前需要先找到最后一个参数流。 fputc
家庭可以改写为fputc(FILE *stream, int c)
。但是,它的前身putc
在K& R书的原始版本中被提及(pdf,滚动到第152页)所以标准的作者在添加无宏时决定坚持惯例fputc
函数库。