M4(1) — UNIX Programmer’s Manual
名称
m4 − マクロプロセッサ
形式
m4 [ files ]
解説
m4 は、Ratfor、 Cなどの言語のフロントエンドとして使用するためのマクロプロセッサです。 引数として指定された各ファイルは、 指定された順序で処理されます。 引数が指定されていない場合、 あるいは引数が‘−’の場合には、 標準入力が読み取られます。 処理されたテキストは、 標準出力に書き込まれます。
マクロをコールする形式は次のとおりです。
name(arg1,arg2,...,argn)
‘(’はマクロ名の直後になければなりません。 定義されたマクロ名の直後に‘(’がない場合には、 引数なしでそのマクロをコールしたものと見なされます。 先行するクォートで囲まれていない空白、 タブ、 ニューラインは、 引数の収集には無視されます。 マクロ名には、 アルファベット文字、および 数字、 アンダースコア‘_’が使用できます。 ただし、 最初の文字は数字以外とします。
左右のシングルクォート (‘ ’) は、 文字列の引用に使用されます。 引用された文字列の値は、 クォートを取り除いた値です。
マクロ名が認識されると、 右かっこ‘)’が見つかるまで、 引数が集められます。 マクロの評価は、 通常引数の収集中に行われ、 ネストになったコールでの値の中にあるコンマや右かっこは 元の入力テキストにあるものと同様に有効です。 引数の収集後、 マクロの値は入力ストリームに戻され、 再度スキャンされます。
m4 では、 次の組み込みマクロを使用できます。 これらを再定義することもできますが、 そのときには元来の意味は失われます。 これらの値は、 特に指定しない限りナルです。
define 二番目の引数が、 最初の引数を名前とするマクロの値として設定されます。 置換テキストに $n (n は数字)があると n 番目の引数で置換されます。 引数 0 はマクロ名です。 引数が省略されている場合にはナル文字列で置換されます。
undefine 引数で指定したマクロの定義を取り消します。
ifdef 最初の引数が定義されていれば、 値は 2番目の引数に、 定義されていなければ、 3番目の引数となります。 3番目の引数が無い場合、 値はナルとなります。 m4 のUNIXバージョンでは、 UNIX という語はあらかじめ定義されています。
changequote
引用符を最初の引数と 2番目の引数で指定されたものに変更します。 引数のない changequote は、 元の値(すなわち、‘ ’)に戻します。
divert m4 は 0 から 9 までの 10個の出力ストリームを持っています。 最終的な出力はストリームを番号順に連結したものです。 初期の状態では、 ストリーム 0 が、 現在のストリームです。 divert マクロは、 現在の出力ストリームを引数で指定された番号(数字文字列)の ストリームに切り替えます。 出力を 0 から 9 以外のストリームに切り替えると、 出力されたものは捨てられます。
undivert 引数で指定したダイバージョンからのテキストの即時出力を行います。 引数がない場合には、すべてのダイバージョンからの出力を行います。 テキストは他のダイバージョンに undivert することができます。 undivert を行うと divert されていたテキストは捨てられます。
divnum 現在の出力ストリームの番号を返します。
dnl 次のニューラインまでの文字を読み取って捨てます。
ifelse 3個またはそれ以上の引数を取ります。 最初の引数が 2番目の引数と同じ文字列であれば、 値は 3番目の引数となります。 引数が同じでなく、 5個以上指定されている場合には、 上記の処理が引数 4、5、6、7 について繰り返されます。 その他の場合には、 値は第4 の引数、 あるいは第4 の引数がなければナルとなります。
incr 引数に 1 を加えた値を返します。 引数の値は、 最初に現れた数字列を10進数と解釈して計算します。
eval 引数を 32ビット算術演算を使用して数式として評価します。 演算子には +、 −、 ∗、 /、 %、 ^(指数)、 関係演算子、 かっこがあります。
len 引数の文字数を返します。
index 最初の引数の中で、 2番目の引数が始まる位置を返します(ゼロから数えます)。 2番目の引数が現れない場合には、 −1が返されます。
substr 最初の引数の、 部分文字列を返します。 2番目の引数は、 最初の文字を選択するためのゼロを起点とする番号です。 3番目の引数は、 部分文字列の長さを示します。 3番目の引数を省略すると、 最初の引数で与えられた文字列の終わりまでと見なされます。
translit 最初の引数で指定された文字列中の、 2番目の引数で指定された各文字を、 3番目の引数で指定された各文字に変換します。 省略は認められません。
include 引数で指定したファイルの内容を返します。
sinclude ファイルがアクセス不能の場合に何もしないことを除き、 include と同じです。
syscmd 最初の引数で指定したUNIXコマンドを実行します。 値は返しません。
maketemp
引数内の文字列 XXXXX へ、 現在のプロセスIDを入れます。
errprint 引数を診断出力ファイルへ書き込みます。
dumpdef 指定した項目、 または引数を指定しない場合は全項目について、 現在の名前と定義を出力します。
関連事項
B.W.Kernighan and D.M.Ritchie, I The M4 Macro Processor
NEWS-OSRelease 3.3