次: , 前: Active Characters, 上: M4 Quotation


8.1.2 一つのマクロの呼び出し

さて,アクティブな文字と以下の単に最初の引数を返す小さなマクロを用いたマ クロで,対話的に進めていきましょう.

     define([car], [$1])

上記の二組の引用符はdefineの引数の一部ではありません.そうではな く,defineの引数の検索が試みられるときに,それらはトップレベルで 理解されます.そのため,それは以下のように書くことと等価です.

     define(car, $1)

しかし,configure.acが不必要な引用符を避けることは受け入れてもか まいませんが,より強固で,完全な形式を提案する必要もあるAutoconfマクロに とっては悪い慣習です.

トップレベルでは,二つの可能性があります.引用符で囲む,または囲まないで の二つです.

     car(foo, bar, baz)
     =>foo
     [car(foo, bar, baz)]
     =>car(foo, bar, baz)

特殊文字に注目してみましょう.

     car(#)
     error-->EOF in argument list

閉じカッコはコメント内に隠れてしまいます.引用符を推測することで,トップ レベルでは以下のように理解します.

     car([#)]

適切な引用符は,もちろんこの問題を修正します.

     car([#])
     =>#

読者は,以下の例の方が理解しやすいかもしれません.

     car(foo, bar)
     =>foo
     car([foo, bar])
     =>foo, bar
     car((foo, bar))
     =>(foo, bar)
     car([(foo], [bar)])
     =>(foo
     car([], [])
     =>
     car([[]], [[]])
     =>[]

これを覚えていると,マクロがマクロを呼び出し,マクロがマクロを呼び出し ...となっているような状況も調査することが可能です.