CプリプロセッサはCに接続されていますが、メイン言語とはまったく異なる構文を持っています。
構文的に重要な空白(行の終わりはステートメントを終了し、マクロが置換リストの開始を決定した後のギャップ)
キーワードベースの代わりにブレースブロックのブロック、
elif
代わりにelse if
宣言-反映-使用の代わりにキーワード主導の定義
=
、値の定義は不可代替文字列構文のヒント(
#include <>
vs#include ""
)怠evaluationな評価(Cのことは明らかですが、6.10.3.1は、重要ないくつかの場所で、マクロ展開の特定の順序を暗示していると読むこともできます)
まったくCのようには見えません!技術的には独自の言語ですが、常にCのほぼ統合された部分として使用されており、構文的に統合されないことは非常に奇妙に思えます。
ウィキペディアはその歴史について語っていません。Portland Pattern Repository にはパスの言及がありますが、Cの歴史を持つ他の人々によって設計されたという事実を超えて詳細に説明することはありません。より長く利用可能。
マクロエンジンとして、それは明らかに説明するだろうランタイム言語から非常に異なる意味があるいくつかの違いがではなく、視覚的なデザインの側面を(それがもともとあるものとして意図されていたかどうかも現代の目には不明だが可能なの種類の楽しみのこと置換システムでは、強力なオプティマイザーが登場する前に関数をインライン化するための「単なる」適切な方法であったか、またはそうであったかを確認できます。Cのようなセマンティクスが実際に出発点だった場合、最終的にC ++テンプレートになったものに近いものがマクロに向かってより論理的な進化を遂げたように感じますが、構文に関するよりも具体的な証拠はありません。
なぜこのように設計されたのか、クリエイターの影響がどのようなものだったのかについての記録はありますか?