引数つきマクロ定義 |
引数つきマクロ定義は,Fig. 0.34のように引数つきのマクロを定義することができます。
例えば
#define ADD( a, b ) ((a)+(b))
と定義すれば,
ADD( 1, 2 )
というマクロは
((1) + (2))
という記号列に展開されます。つまり,引数つきマクロ定義によって,一連の処理を関数のように記述することができるのです。
このADDは足し算をするマクロというわけです。また,各実引数は複数の記号から構成されていてもよく,
ADD( 2 * x, 3 )
とした場合は
((2 * x) + (3))
と展開されます。なお,ADDなどの例で,マクロ定義される記号列全体とその中の仮引数を()でくくっているのは,展開される式
の中で実引数が予期しない形で結合されるのを防止するためです。
例えば,
#define ADD( a, b ) a + b
とした場合は式の中で“(x * 2)にyを足して,その合計をz倍”しようとして
ADD( x * 2, y ) * z
と記述したとき,これは
x * 2 + y * z
となってしまって,意図した結果が得られないことになります。