Next: , Previous: Define, Up: Definitions


4.2 マクロの引数

マクロは引数を取ることができます。n番目の引数は展開用テキストの中では $nとして書き示され、マクロが展開されるときにn番目の 実引数(actual argument)に置き換えられます。 次の例は2つの引数を取るマクロです。2つの引数の順番を単に交換します。

     define(`exch', `$2, $1')
     ⇒
     exch(arg1, arg2)
     ⇒arg2, arg1

これはdefineへの引数の順番を逆にしたいときなどに使えます。

     define(`exch', `$2, $1')
     ⇒
     define(exch(``expansion text'', ``macro''))
     ⇒
     macro
     ⇒expansion text

二重になった引用符の説明についてはSee Quoting Argumentsを参照してください。

GNU m4では‘$’に続く数字は複数の桁でもよいので、 マクロはいくつでも引数を取ることができます。 これと違いUNIXのm4では1桁の数字しか認識されません。

特殊なケースとして、0番目の引数$0は常に現在展開されているマクロの名前 となります。

     define(`test', ``Macro name: $0'')
     ⇒
     test
     ⇒Macro name: test

クォートされたテキストを展開後のテキストに含めたい時は、 クォートは入れ子にできることを思い出しましょう。したがって、

     define(`foo', `This is macro `foo'.')
     ⇒
     foo
     ⇒This is macro foo.

展開されたテキストに含まれる‘foo’は、 クォートされた文字列(quoted string)であり名前(name)ではないので、 再走査によって展開はされず、 引用符がはぎ取られるだけです(see Syntax)。