putc需要stdout,vs puts

C历史问题在这里。 为什么C函数putc需要第二个参数,如

 putc( 'c', stdout ) ; 

虽然看跌哦这么方便

 puts( "a string" ) ; 

msvc ++中有一个函数

 putchar( 'c' ) ; 

这可能是人们期望putc工作的方式。 我认为putc的第二个参数是能够将putc定向到一个文件,但是有一个函数fputc

 int putc ( int character, FILE * stream ); 

将字符写入流并推进位置指示器。
所以它比putchar更通用
其他function可以基于此例如

 #define putchar(c) putc((c),stdout) 

根据Kernighan的书, putc等同于fputcputc可以实现为宏,putc 可能不得不多次评估它的流参数
我已经读过,据说两者都存在向后兼容性,但不确定这是否有效

这样您就可以选择输出到不同的流,例如文件。

fputcputc的定义大致相同,只是putc可能是一个宏,它不止一次地评估流参数。 fputc只评估一次stream参数。

putc和fputc之间的区别在于,通过使用putc,您可能会冒运行本质上不安全的宏版本,因为它可能不得不多次评估其流参数。 这导致大多数人不知道的并发症,因此不注意,因此fputc更好用。 fputc的宏没有这个问题。

putchar()不只是在MSVC中 – 它是一个标准的C函数(嗯,真的是宏)。