#define プリプロセッサディレクティブには、単純な文字列を置き換えのほかに、関数形式のマクロ(function-like macro)、すなわちマクロ関数という使い方もある。
マクロ関数を使うと、プリプロセッサによって置き換えられる文字列に引数を渡すことができる。
#incluce
#define SUM(i, j) i + j
int main(void)
{
int sum;
sum = SUM(10, 20);
printf("%d\n", sum);
return 0;
}
11行目の
sum = SUM(10, 20);
はプリプロセッサによって
sum = 10 + 20;
に置き換えられる。この例は単純だけど、プログラム中に同じ処理が何度も出てくるときには、マクロ関数が使える。もちろん普通の関数にしてもいいけど、関数呼び出しのオーバーヘッドがないぶん有利。ただ、マクロ関数が出てくる場所全部に同様のコードが複製されるので、プログラムが大きくなる。
……と、こう書くとマクロ関数にしたほうがいいのか、普通の関数のほうがいいのかよくわかんないなあ。