2015-01-15 12 views
7

なぜfputsとfprintfが逆のストリーム順であるのか分かりません。なぜfputsとfprintfは逆のストリーム順

int fputs (const char * str, FILE * stream); 
int fprintf (FILE * stream, const char * format, ...); 
ssize_t write(int fd, const void *buf, size_t count); 

I知らfprintfのは、可変引数をサポートするために前方に流れを入れ、しかし、なぜfputsシリーズは一貫 を保持していません?

+3

を知らないかもしれない、私は誰もが絶対に確実に答えを与えることができるかわかりません。私の個人的な信念は、 'printf'が必然的にそれを実行したことです(あなたがすでに述べたように)。' fputs'はおそらく既にそれによって確立されていたでしょうから、一致させるためにそれを逆にすることは許されないと見られました。 –

+0

Scott MeyersはAPIデザインに関する講演を行ったところで、この正確な例を「間違っている」[https://www.youtube.com/watch?v=5tg1ONG18H8]として強調しました。 – Jeff

+0

'stdio'はあまり設計されていない一般的なライブラリです。それには他にも多くの問題があります。 – EJP

答えて

6

これらの事が書かれていたので、多くの十年前、それは一般的にのみ

:-)歴史家のための関心の問題になるのよそれは彼らがあることを引き起こし、おそらくちょうど設計上の決定(または決定の欠如)でしたこの方法では、ISO値の下位互換性のため、決して変更していません。

それはputsが最初に書かれており、それがfputsを書く時間が来たとき、開発者は単に末尾に新しいパラメータを仮止め、それをcut'n'pastedたことかもしれません。 printf/fprintfについても同じ状況が存在しても、可変引数リストが最後に必要であるため、これは可能ではありませんでした。

しかし、脇仮定、今私たちの最愛のデニスがなくなっていることを、我々はそう長く前に起こった実際の理由..

+1

デニスに恵まれました!私はそれに興味があります。私はいつも何らかの理由で信じていました。あなたが正しいかもしれません!あなたの答えをありがとう! – qianchenglong

+0

しかし、putputsは何かを出力するためにfputs(str、stdout)を呼び出すので、fputsを先に設計する必要がありますか?私はそれを保証しません。 – qianchenglong

+0

@qianchenglong、 'puts'は今では' fputs'を呼び出すかもしれませんが、すべての歴史のように全く異なるかもしれません:-) – paxdiablo

関連する問題