5

ここでCの歴史の質問。putcC関数が次のような2番目のパラメーターを必要とするのはなぜですか

putc( 'c', stdout ) ;

パットはとても便利ですが

puts( "a string" ) ;

msvc++には関数があります

putchar( 'c' ) ;

これは、期待どおりputcに機能します。putcの2番目のパラメータはファイルに転送できることだと思いましたが、そのため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除いて、ほぼ同じように定義されています。ストリームパラメータを1回だけ評価します。putcfputc

于 2010-12-30T15:29:38.090 に答える
1

putcとfputcの違いは、putcを使用すると、ストリーム引数を複数回評価する必要があるため、本質的に安全ではないマクロバージョンを実行するリスクがあることです。これは、ほとんどの人が気付いていないために気をつけていない合併症を引き起こすため、fputcを使用することをお勧めします。fputcのマクロにはこの問題はありません。

于 2010-12-30T15:37:27.277 に答える
1

putchar()これはMSVCだけではなく、標準のC関数です(まあ、実際にはマクロです)。

于 2010-12-31T02:55:42.977 に答える