Cプログラミング言語で、フォーマットされた入力を読み取る関数が「readf」ではなく「scanf」と呼ばれたのはなぜなのでしょうか。私はそれが以前の言語から派生したと思うので、その場合、なぜ以前の言語でそのように命名されたのですか?(再帰)
また、なぜ「writef」ではなく「printf」なのでしょうか?C以外の言語で、「表示」ではなく「印刷」または「書き込み」を行う理由
Cプログラミング言語で、フォーマットされた入力を読み取る関数が「readf」ではなく「scanf」と呼ばれたのはなぜなのでしょうか。私はそれが以前の言語から派生したと思うので、その場合、なぜ以前の言語でそのように命名されたのですか?(再帰)
また、なぜ「writef」ではなく「printf」なのでしょうか?C以外の言語で、「表示」ではなく「印刷」または「書き込み」を行う理由
回答:
Printfは「印刷-フォーマット済み」です。「printer」の「print」と同じルートを持ちます。これは「teleprinter」の略語であり、「teletypewriter」の同義語であり、おそらくモニターやキーボードの代わりにコンピューターと対話するために実際のTTYを使用したときから来ています。
OCRのコンテキストでの「スキャナー」の使用と比較して、Scanfは「スキャン-フォーマット済み」であり、「印刷」パラダイムと一致します。また、読み取り/書き込みは長い間システムコールのペアであり、printfがwrite(2)とは異なるのと同様に、scanfをread(2)から分離することが望まれていました。
「読む」には、実際にあなたが見ているものを理解することが必要です。基本的に入力をキャプチャすることを意味する「スキャン」とは対照的に、後でそれをどうするかを考えます。
これは単なる「直観」である答えです。名前readf()
は、あなたがすでに読むべきものを持っていることを前提としています。しかし、scanf()
実際には2つのことを行う必要があります。ユーザー入力を待機し(つまり、何かが見つかるまで入力バッファーをスキャンし続けます)、それを読み取ります。オペレーティングシステムが実際にそれをどのように実装するかを判断するのではなく、概念的な動作を説明するだけです。
私はあなたが私に言ってfscanf()
、sscanf()
この考えと一致しないことを知っていますが、私はそれらが拡張であるscanf()
と仮定します。
ところで、なぜあなたの名前は「ABCD」ではなく「Doug」ですか?? :-P