次: Pushdef, 前: Undefine, 上: Definitions
すでに定義済みのマクロの名前を替えることができます。
それには組み込みマクロdefnが必要となります。
defn(name)
これはnameの定義をクォートしたものに展開されます。 引数が定義済みのマクロでないときは展開されると消滅します。
nameがユーザ定義マクロの場合、
クォートされた定義とは単にクォートされた展開用テキストのことです。
nameが組み込みマクロの場合、
展開後のテキストは、m4の内部にある組み込みマクロの定義を指す
特殊なトークンとなります。
このトークンは、define (および pushdef)
の第2引数としてのみ意味を持ち、その他の文脈では無視されます。
通常の使用方法は、次の例でundefineの名前をzapに換える方法を
見るのが一番分かりやすいでしょう。
define(`zap', defn(`undefine'))
=>
zap(`undefine')
=>
undefine(`zap')
=>undefine(zap)
このようにdefnはユーザ定義マクロの定義や
組み込みマクロの定義をコピーするために使うことができます。
たとえ元のマクロが削除されても、もう一方の名前を使って
定義にアクセスすることができます。
defnは引数を与えたときだけ認識されます。