このセクションでは、C 言語のマクロと関数の違いについて説明します。マクロは前処理されます。これは、すべてのマクロがコンパイル時に前処理されることを意味します。関数は前処理されず、コンパイルされます。
型チェックはマクロでは実行されないため、異なる型を入力すると問題が発生する可能性があります。関数を使用すると、このようなことは起こりません。さらに、マクロの入力が正しく維持されていない場合、無効な結果が生成される可能性があります。質問がある場合は、次の手順を確認してください。
#include <stdio.h> #define SQUARE(x) x * x int sqr(int x) { return x*x; } main() { printf("Use of sqr(). The value of sqr(3+2): %d</p><p>", sqr(3+2)); printf("Use of SQUARE(). The value of SQUARE(3+2): %d", SQUARE(3+2)); }
Use of sqr(). The value of sqr(3+2): 25 Use of SQUARE(). The value of SQUARE(3+2): 11
関数とマクロ、両方で同じタスクを実行する必要がありますが、ここでは出力結果が異なることがわかります。主な理由は、関数のパラメーターとして 3 2 を渡すと、それが 5 に変換され、5 * 5 = 25 が計算されるためです。マクロの場合、3 2 * 3 2 = 3 6 2 = 11 が実行されます。
したがって、次の問題に対してマクロは推奨されません:
型チェックなし
マクロがあるため、デフォルトでデバッグ モードになります。
マクロを名前空間なしで置き換えるだけです。したがって、マクロが 1 つのセクションで定義されている場合は、別のセクションで使用できます。
マクロは前処理の前に追加されるため、コード長が増加します。
マクロはコンパイル時エラーをチェックしません。
以上がC のマクロと関数の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。