Next: Pseudo Arguments, Previous: Define, Up: Definitions
マクロは引数を取ることができます。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)。