web-dev-qa-db-ja.com

Cの最も基本的な印刷関数が `printf`ではなく` print`という名前にならないのはなぜですか?

私の知る限り、Cにはprint関数がありません。入手できる最も基本的なものはprintfです。では、この関数の名前がprintではなくprintfではない理由はありますか?

this の質問はscanf/readfおよびprintf/writefに関するものであることに注意してください。これはprintf/printについてです。

8
Utku

K&Rのルーツに戻りましょう。

原点

元のK&Rの11ページのチュートリアルの章で、関数のOriginに関するヒントを見つけることができます。

ちなみに、printfはC言語の一部ではありません。 C自体で定義された入力または出力はありません。 printfには魔法はありません。 通常Cプログラムからアクセス可能なルーチンの標準ライブラリの一部である便利な関数です。

「アクセス可能」という表現は、Julesによって提案された他のプログラミング言語と共有されているライブラリ、または共有OSライブラリに基づいている可能性があることを示唆しています。 BとCはどちらもUNIXの開発に密接に関連しており、同じ人々 D.Ritchie、BWKernighan and K.Thompson がこれらの問題に緊密に協力しているため、これらを使用するのは当然のことです。同様の命名規則。

なぜprintfのfなのか?

セクションのタイトル7.3フォーマット済みの出力-オリジナルのK&Rの145ページのprintfは、fがフォーマット済みであることを強く示唆しています:

他のソースを検索すると、BとCのprintf両方ともBCPLのwritef関数に由来するように見える が1966年にすでに使用されている%フォーマット文字。

また、ALGOL68は、フォーマットされた出力にprintf関数も採用したことにも注意してください。しかし、フォーマットのロジックは少し異なりました。

19
Christophe

関数「printf」は、CによってB標準ライブラリから継承されました。 Bでは、そのような関数はこれだけではありませんでした。たとえば、数字を出力するための「printn」もありました。 UNIXの初期バージョンからの言語のリファレンスは、こちらを参照してください。 https://www.bell-labs.com/usr/dmr/www/kbman.html

19
Jules

これは、最も基本的な印刷関数ではありません。最も基本的な印刷関数は、文字列を印刷するputsおよびputcharです。とcharそれぞれ。

fはフォーマット済みです。printfputsまたはputcharとは異なり)が出力しますformatted出力、したがってprintf。たとえば、16進数でintを印刷したり、小数点以下3桁に丸められたfloatを印刷したり、文字列を左側に埋め込んだりできます。 (そうです、あなたはその権利を読みます:1970年代Cは標準ライブラリに npmモジュール全体を実行する) 。;)

Cは最初にprintfを実行しませんでした。Bは同じ名前の関数に類似した機能があります。 Wikipedia は、BCPLのwritefのさらに初期のインスピレーションを識別します。

6
Paul Draper