さて,アクティブな文字と以下の単に最初の引数を返す小さなマクロを用いたマ クロで,対話的に進めていきましょう.
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([[]], [[]]) =>[]
これを覚えていると,マクロがマクロを呼び出し,マクロがマクロを呼び出し ...となっているような状況も調査することが可能です.