[〜#〜] c [〜#〜]のマクロと関数の違いは何ですか?マクロと関数を使用できるアプリケーションを1つ教えてください。
利点
短所
基本的な違いは、関数がコンパイルされ、マクロが前処理されることです。関数呼び出しを使用すると、これらのすべてのスタック操作でASM CALLに変換され、パラメーターと戻り値が渡されます。 MACROを使用すると、Cプリプロセッサはマクロを使用してすべての文字列を変換し、コンパイルします。
マクロを使用することのマイナスは、実装を隠すことです。バグがあると、バグを見つけるのが難しくなります。
C(およびC++)では、マクロはプリプロセッサディレクティブです。これは、プログラムがコンパイルを開始する前に、すべてのマクロを通過して処理することを意味します。マクロは便利です
欠点
例
#define INCREMENT(x) x++
関数は、比較的独立して実行でき、特定のタスクを実行するコードです。数学関数のようなものと考えることができます。入力のセットが与えられた関数は特定の出力を与えます。 Cでは、これらは次のように定義されます。
<return type> <name>(<parameters>)
{
//code body
}
もう1つの違いは、機能にはスタックオーバーヘッドがありますが、マクロの場合はスタックオーバーヘッドがないことです。それは単なるコードの拡張です。
マクロは単なるテキストの置換と考える必要があります。コード内にマクロが表示されるたびにマクロコードをインライン化するようなものです。これは「コードスニペット」に適しています。関数呼び出しのオーバーヘッドを回避できるからです。関数を呼び出すたびに、スタックにパラメーターをプッシュするための努力が必要になるからです。