Next: , Up: M4 Quotation


8.1.1 アクティブな文字

適切な引用符の重要性を完全に理解するため,最初にAutoconfでの特殊な文字が 何かを知る必要があります.‘#’はマクロ展開が実行されない内部コメント の導入で,‘,’は引数のセパレータ,‘[’と‘]’はそれらの引用符, そして最後は,(M4が対の一致を試みる)‘(’と‘)’です.

マクロ呼び出しの微妙な状況を理解するために,最初に明らかな失敗を紹介しな ければならないでしょう.以下で“明確にされ”ていて,実生活でも見つかるで しょうが,それらは通常ごまかしです.

ハッシュと改行まで実行することで導入されるコメントは,トップレベルへの不 明瞭なトークンです.アクティブな文字はそうではなくなり,マクロの展開もあ りません.

     # define([def], ine)
     ⇒# define([def], ine)

マクロの展開があるごとに,引用符も展開されます.すなわち,第一レベルの引 用符は削除されます.

     int tab[10];
     ⇒int tab10;
     [int tab[10];]
     ⇒int tab[10];

これを覚えていなければ,読者は絶望しながらもマクロのarrayを使用し てみるでしょう.

     define([array], [int tab[10];])
     array
     ⇒int tab10;
     [array]
     ⇒array

期待する結果を正しく出力するにはどうすれば良いでしょうか 1


Footnotes

[1] defnを使用します.