【发布时间】:2012-12-10 03:23:54
【问题描述】:
我在阅读 Kernighan 的 C 编程书籍时遇到了 putc 和 fputc。我不太明白两者之间的区别,也不明白什么时候可以使用另一个。我在 StackOverflow 上找到了一些涉及该主题的帖子,但仍不清楚。
这里提到(putc needs stdout, vs puts):
根据 Kernighan 的书,
putc等同于fputc,但putc可以实现为宏,putc可以多次评估其流参数。
putc和fputc之间的区别在于,使用putc,您可能会运行宏版本,这本质上是不安全的,因为它可能需要多次评估其流参数。这会导致大多数人没有意识到的并发症,因此不会提防,因此最好使用fputc。fputc的宏没有这个问题。
问题:
-
putc可以实现为宏,但与fputc相同有什么问题? -
第二个声明提到了一些并发症和安全问题。那些是什么?
-
putc不止一次评估其参数。那么与评估论点相比,它有哪些优点或缺点。
【问题讨论】:
-
关于性能,红色here: "fputc子程序和putc宏一样,但是fputc是一个真正的子程序而不是宏。它比putc运行的慢,但占用的时间更少每次调用的空间。” -