C历史问题在这里。为什么 C 函数putc
需要第二个参数,例如
putc( 'c', stdout ) ;
虽然 puts 更方便
puts( "a string" ) ;
msvc++中有一个函数
putchar( 'c' ) ;
其工作方式可能是人们期望putc
的工作方式。我认为的第二个参数putc
是能够定向putc
到一个文件,但有一个功能fputc
。
int putc ( int character, FILE * stream );
将一个字符写入流并推进位置指示器。
所以它是一个比putchar
其他功能更通用的功能可以基于此,例如
#define putchar(c) putc((c),stdout)
根据 Kernighan 的书putc
,相当于fputc
但putc
可以实现为宏,并且 putc可能必须多次评估其流参数。
我已经读过,据说两者都是为了向后兼容而存在的,但不确定这是否有效
这样您就可以选择输出到不同的流,例如文件。
fputc
并且putc
定义大致相同,除了putc
可能是一个不止一次评估流参数的宏。fputc
只评估一次流参数。
putchar()
不只是在 MSVC 中——它是一个标准的 C 函数(嗯,真的是宏)。
putc 和 fputc 之间的区别在于,通过使用 putc,您可能会运行本质上不安全的宏版本,因为它可能必须多次评估其流参数。这会导致大多数人没有意识到的并发症,因此不会提防,因此最好使用 fputc。fputc 的宏没有这个问题。