gpt4 book ai didi

c - 为什么 C I/O 函数之间不一致?

转载 作者:行者123 更新时间:2023-11-30 20:22:09 24 4
gpt4 key购买 nike

一致性是代码库的基本属性,更不用说对于最终成为世界上使用最多的编程语言而言。

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 参数在不同位置?这样的选择有什么历史/设计动机吗?

最佳答案

fprintf 系列没有好的选择,因为采用可变参数列表的函数需要在可变参数部分之前采用其参数的“固定”部分:

  • stream 粘在中间,如 fprintf(const char *format, FILE *stream, ...) 将与 printf 不一致code>,其中格式化值紧跟在格式字符串之后。它也将与 fputc 系列保持不一致。
  • stream粘贴到可变参数部分,如fprintf(const char *format, ...),理论上是可行的,但效率很低,因为你在开始写入流之前需要到达最后一个参数。
另一方面,

fputc 系列可以重写为 fputc(FILE *stream, int c)。然而,它的前身 putc 在 K&R 书的原始版本( pdf ,滚动到第 152 页)中被提到,因此标准的作者决定在添加非宏 fputc 函数添加到库中。

关于c - 为什么 C I/O 函数之间不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40619583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com