putc需要stdout,vs puts

时间:2010-12-30 15:27:27

标签: c history stdio

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

putc( 'c', stdout ) ;

虽然看跌期权非常方便

puts( "a string" ) ;

msvc ++中有一个函数

putchar( 'c' ) ;

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

4 个答案:

答案 0 :(得分:10)

int putc ( int character, FILE * stream );

将一个字符写入流并推进位置指示器 因此它比putchar更通用 其他功能可以基于此。

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

putchar()不仅仅是在MSVC中 - 它是一个标准的C函数(好吧,真的是宏)。