5

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

putc( 'c', stdout ) ;

虽然 puts 更方便

puts( "a string" ) ;

msvc++中有一个函数

putchar( 'c' ) ;

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

4

4 回答 4

11
int putc ( int character, FILE * stream );

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

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

根据 Kernighan 的书putc,相当于fputcputc可以实现为宏,并且 putc可能必须多次评估其流参数
我已经读过,据说两者都是为了向后兼容而存在的,但不确定这是否有效

于 2010-12-30T16:07:37.213 回答
2

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

fputc并且putc定义大致相同,除了putc可能是一个不止一次评估流参数的宏。fputc只评估一次流参数。

于 2010-12-30T15:29:38.090 回答
1

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

于 2010-12-31T02:55:42.977 回答
1

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

于 2010-12-30T15:37:27.277 回答