引数つきマクロ定義

  引数つきマクロ定義は,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

となってしまって,意図した結果が得られないことになります。