私は C を少し書いたことがあり、C が何をしているのかを理解するのに十分なほど十分に読むことができます。マクロが何であるかを覚えておき、読みながら頭の中で代用する必要があります。私が出会った直感的で分かりやすいものは、いつも小さな小さな機能のようなものでした.
プリプロセッサでデバッグまたはクロスプラットフォーム ビルド用にさまざまなビルド タイプを定義する必要があることは理解できますが、任意の置換を定義する機能は、すでに難しい言語をさらに理解しにくくするためにのみ役立つようです。
C にこのような複雑なプリプロセッサが導入されたのはなぜですか? そして、単純な if #debug スタイルの条件付きコンパイル以外の目的でまだ使用されているように見える理由を理解できる使用例はありますか?
編集:
いくつかの回答を読んでも、まだわかりません。最も一般的な答えは、コードをインライン化することです。inline キーワードがそれを行わない場合は、それを行わない正当な理由があるか、実装を修正する必要があります。「このコードを実際にインライン化する」ことを意味するまったく異なるメカニズムが必要な理由がわかりません(インライン化の前に書かれたコードは別として)。また、「関数に入れるにはばかげている場合」という考えも理解できません。確かに、入力を受け取って出力を生成するコードは、関数に入れるのが最適です。私は C 言語のマイクロ最適化に慣れていないので、理解できないかもしれませんが、プリプロセッサは、いくつかの単純な問題に対する複雑な解決策のように感じます。