次: , 前: Inhibiting Invocation, 上: Macros


3.3 マクロの引数

ある名前(name)が認識され、その名前に対するマクロの定義が存在するとき、 それはマクロとして展開されます。

その名前の直後に開きカッコ`('があるときは、 引数をすべて集めてから、マクロが呼び出されます。 足りない引数があるときは、空文字列が与えられたものとして解釈されます。 余分な引数は無視されます。

組み込みマクロの呼び出しで引数の数が不足しているとき、通常ならm4は 警告を発しますが、コマンドラインオプション`-Q'を使えば、 この警告を抑制できます。 ユーザ定義マクロに対する引数の個数チェックはありません。

引数の収集が行われているときでも、通常と同じようにマクロの展開は行われます。 そして展開後のテキストに出現した、コンマ、引用符、 カッコなどはすべて個々の引数の定義に寄与します。 したがってfooが`, b, c'に展開されるとき、 次のマクロの呼び出し、

     bar(a foo, d)

は、4つの引数、`a ', `b', `c', `d' を伴うマクロの呼び出しとなります。 なぜ最初の引数に空白(whitespace)が含まれているのか理解するには、 引数の前にある空白はすべて削除されるのに対して、引数の後ろにある空白は 削除されないことを覚えておくとよいでしょう。