私の知る限り、Cにはprint
関数がありません。入手できる最も基本的なものはprintf
です。では、この関数の名前がprint
ではなくprintf
ではない理由はありますか?
this の質問はscanf
/readf
およびprintf
/writef
に関するものであることに注意してください。これはprintf
/print
についてです。
K&Rのルーツに戻りましょう。
元のK&Rの11ページのチュートリアルの章で、関数のOriginに関するヒントを見つけることができます。
ちなみに、
printf
はC言語の一部ではありません。 C自体で定義された入力または出力はありません。printf
には魔法はありません。 通常Cプログラムからアクセス可能なルーチンの標準ライブラリの一部である便利な関数です。
「アクセス可能」という表現は、Julesによって提案された他のプログラミング言語と共有されているライブラリ、または共有OSライブラリに基づいている可能性があることを示唆しています。 BとCはどちらもUNIXの開発に密接に関連しており、同じ人々 D.Ritchie、BWKernighan and K.Thompson がこれらの問題に緊密に協力しているため、これらを使用するのは当然のことです。同様の命名規則。
セクションのタイトル7.3フォーマット済みの出力-オリジナルのK&Rの145ページのprintfは、f
がフォーマット済みであることを強く示唆しています:
他のソースを検索すると、BとCのprintf
両方ともBCPLのwritef
関数に由来するように見える が1966年にすでに使用されている%
フォーマット文字。
また、ALGOL68は、フォーマットされた出力にprintf
関数も採用したことにも注意してください。しかし、フォーマットのロジックは少し異なりました。
関数「printf」は、CによってB標準ライブラリから継承されました。 Bでは、そのような関数はこれだけではありませんでした。たとえば、数字を出力するための「printn」もありました。 UNIXの初期バージョンからの言語のリファレンスは、こちらを参照してください。 https://www.bell-labs.com/usr/dmr/www/kbman.html
これは、最も基本的な印刷関数ではありません。最も基本的な印刷関数は、文字列を印刷するputs
およびputchar
です。とcharそれぞれ。
fはフォーマット済みです。printf
(puts
またはputchar
とは異なり)が出力しますformatted出力、したがってprintf。たとえば、16進数でintを印刷したり、小数点以下3桁に丸められたfloatを印刷したり、文字列を左側に埋め込んだりできます。 (そうです、あなたはその権利を読みます:1970年代Cは標準ライブラリに npmモジュール全体を実行する) 。;)
Cは最初にprintf
を実行しませんでした。Bは同じ名前の関数に類似した機能があります。 Wikipedia は、BCPLのwritef
のさらに初期のインスピレーションを識別します。