ここでCの歴史の質問。putc
C関数が次のような2番目のパラメーターを必要とするのはなぜですか
putc( 'c', stdout ) ;
パットはとても便利ですが
puts( "a string" ) ;
msvc++には関数があります
putchar( 'c' ) ;
これは、期待どおりputc
に機能します。putc
の2番目のパラメータはファイルに転送できることだと思いましたが、そのためputc
の関数がありますfputc
。
int putc ( int character, FILE * stream );
ストリームに文字を書き込み、位置インジケーターを進めます。
したがって、他の関数がこれに基づくことができる
よりも一般的な関数です。putchar
#define putchar(c) putc((c),stdout)
Kernighanの本によると、putc
と同等ですfputc
がputc
、マクロとして実装でき、putcはそのストリーム引数を複数回評価する必要がある場合があります。
下位互換性のために両方が存在すると思われることを読みましたが、これが有効かどうかはわかりません
これは、ファイルなどの別のストリームに出力するオプションがあるためです。
fputc
ストリームパラメータを複数回評価するマクロである可能性があることをputc
除いて、ほぼ同じように定義されています。ストリームパラメータを1回だけ評価します。putc
fputc
putcとfputcの違いは、putcを使用すると、ストリーム引数を複数回評価する必要があるため、本質的に安全ではないマクロバージョンを実行するリスクがあることです。これは、ほとんどの人が気付いていないために気をつけていない合併症を引き起こすため、fputcを使用することをお勧めします。fputcのマクロにはこの問題はありません。
putchar()
これはMSVCだけではなく、標準のC関数です(まあ、実際にはマクロです)。