最終更新:2011-02-01 (火) 21:39:35 (4826d)  

m4
Top / m4

マクロプロセッサ

http://www.gnu.org/software/m4/

機能

  • テキスト置換
  • パラメータ置換
  • ファイルのインクルード
  • 文字列操作
  • 条件付き評価
  • 数式表現
  • システムインタフェース
  • プログラマ診断

m4 の特徴

  • cpp ではマクロは1行のものしか定義できないのは周知のことである。強引に長いマクロを書くことはできるが、その場合でも改行を含むことはできない。しかし、C言語では改行は本質的ではないために、これは問題にはならない。だが、改行が本質的である言語のソースの場合には、どうしても改行をマクロに含みたいケースがある。cpp はこれには対応できないが、m4 はこれに対応できる。つまり、マクロ定義の中に改行コードを含みうる。
  • cpp ではトークンはC言語の定義をそのまま流用している。だから、トークンとして使えるのは [a-zA-Z_][a-zA-Z0-9_]* の正規表現で示されるシーケンスだけである。しかし、m4 は任意の文字セットをトークンとして再定義できる仕様がある。だから、トークンの定義を TeX 風に「\」で始めるとか、sh 風に「$」で始めるとか、そういうこともできる(ただし、これをするためには m4 の再コンパイルが必要だが...)。
  • m4 はさまざまな置換に使える有用なの「組み込み関数」を持っている。
  • しかし、それらの組み込み関数でさえ、プレフィックスによる置換の禁止を設定することができる。だから、偶然の名前バッティングを有効に回避することができる。
  • さまざまな仕様が良く考えられており、再帰定義を活用することでループを実現することさえできる。

参考

関連