printfファミリの関数の形式指定子としてパーセント記号(%)が選択されたのはなぜですか?
少なくともCではprintf、関数ファミリを使用して書式設定された文字列を印刷することを誰もが知っています。また、これらの関数はパーセント記号(%)を使用して、書式指定子の始まりを示します。例えば、%d印刷することを意味しint、そして%u手段印刷しますunsigned int。printf関数とフォーマットのプレースホルダーがどのように機能するのかよくわからない場合、または単にリフレッシャーが必要な場合は、Wikipediaの記事を参照してください。 私の質問は、これが元々、または将来フォーマット指定子として選択されるべきである特に説得力のある理由がありますか? 明らかに、この決定はかなり前に行われ(C言語の前任者である可能性が非常に高い)、それ以降は多かれ少なかれ「標準」になっています(Cだけでなく、他の多くの言語でもさまざまな程度に構文を採用しているため)、変更するには遅すぎます。しかし、なぜこの選択が最初に行われたのか、同様の機能を備えた新しい言語を設計している場合の選択肢としてそれが理にかなっているのかについて誰かが洞察を持っているのであれば、私はまだ興味があります。 たとえば、C#(および他の.NET言語ファミリ)を使用して、Microsoftは文字列フォーマット関数の操作に関してわずかに異なる決定を下しました。そこにある程度のタイプセーフティを適用できますが(printfC の実装とは異なります)、したがって対応するパラメーターのタイプを示す必要はありませんが、中括弧({})のゼロインデックスペアを使用することにしました次のような形式指定子として: string output = String.Format("In {0}, the temperature is {1} degrees Celsius.", "Texas", 37); Console.WriteLine(output); // Output: // In Texas, the temperature is 37 degrees Celsius. String.Format一般的な複合フォーマットに関するこの記事と同様に、メソッドのドキュメントには詳細情報が含まれていますが、正確な詳細はかなり重要ではありません。ポイントは%、フォーマット指定子の開始を示すために使用するという長年の慣行を放棄したということです。C言語は{d}and を簡単に使用でき{u}たはずですが、そうではありませんでした。誰が、なぜ、この決定が振り返って意味をなすか、そして新しい実装がそれに続くべきかどうかについての考えを持っていますか? 明らかに、文字列自体に含めることができるようにエスケープする必要のない文字を選択することはできませんが、その問題は、そのうちの2つを使用するだけで既に十分に解決されています。関連する他の考慮事項は何ですか?