m4 コマンド
目的
ファイルをプリプロセスして、マクロ定義を展開します。
構文
m4 [ -e (E)] [ - ] [ -s ] [ -B 数値 ] [ -D 名前 [ =値 ] ] ... [ -H 数値 ] [ -I (I) ディレクトリー ] [ -S (S) 数値 ] [ -T (T) 数値 ] [ -U (U) 名前 ] ... [ ファイル ... ]
説明
m4 コマンドは、C やその他の言語用のプリプロセッサーとして使われるマクロ・プロセッサーです。 このコマンドを使うと、組み込みマクロやユーザー定義マクロを処理できます。
各 File パラメーターは順番に処理されます。 File パラメーターを指定しないか、ファイル名として - (ダッシュ) を指定すると、m4 コマンドは標準入力を読み取ります。 処理済みのマクロは標準出力に書き出されます。 マクロ呼び出しの形式は次のとおりです。
macroname(argument . . . )macroname のすぐ後に左小括弧が必要です。 定義済みマクロ名の後に左小括弧を付けないと、m4 コマンドはそれを引数を持たないマクロ・コールとして読み取ります。 マクロ名は ASCII の英字、数字、_ (下線) 文字で構成されています。 マクロ名には拡張文字は使用できません。 また、先頭の文字に数字を使用することもできません。
引数を収集するときに、m4 コマンドは引用符が付いていない先行ブランク、タブ、改行文字を無視します。 文字列に引用符を付けるときは単一引用符を使用してください。 引用符付き文字列では、引用符以外の文字列が値になります。
m4 コマンドはマクロを認識すると、一致する右小括弧を検索して引数を収集します。 マクロ定義にあるものよりも少ない引数を指定すると、m4 コマンドはマクロ定義内の末尾の引数をヌルと見なします。 マクロ評価は通常、引数の収集中に行われます。 ネストされたマクロ・コールの値にあるコンマや右括弧はすべてリテラルに変換されるので、エスケープ文字や引用符は不要です。 引数を収集すると、m4 コマンドはマクロの値を元の入力ストリームにプッシュして再びスキャンします。
組み込みマクロ
m4 コマンドは次の組み込みマクロを使用可能にします。 組み込みマクロは再定義できますが、再定義すると元の意味は失われます。 これらのマクロの値は、特に明記しなければヌルです。
| 項目 | 説明 |
|---|---|
| define(名前,NewName) | Name に指定されたマクロ名を NewName に指定された値と置換します。 NewName 文字列の形式には $n . . .$n . . . が使用できます (n は数字)。 この場合、置換テキスト内の n の各オカレンスは、Name の n 番目の引数で置換されます。$0 はマクロ名です。 脱落引数はヌル文字列に置換されます。 $# は引数の数に置換されます。$* はすべての引数がコンマで区切られたリストに置換されます。$@ は $* と同じように機能しますが、各引数は現在の引用符で囲まれます (changequote を参照)。 |
| undefine(名前) | Name の定義を除去します。 |
| defn(Name . . . ) | Name の引用符付き定義を戻します。 |
| pushdef (名前, NewName) | defineのように NewName で Name を再定義しますが、以前の定義は保存します。 |
| popdef(名前 . ) | Name の現行定義を除去して、以前の定義が存在する場合はその定義に戻ります。 |
| ifdef(Name,True,[False ]) | Name が定義されている場合のみ True の値を返し、そうでない場合は False を返します。 ただし、False を指定しなければ、値はヌルになります。 注意: ifdefの動作は、Single UNIX仕様第10版に準拠するように変更されている。 ifdef の以前の動作では、Name が定義されており、かつ 0 として定義されていない場合のみ True の値を返します。 デフォルトでは、ifdef は、UNIX10 より前で動作したように動作します。 UNIX 10 の動作を取得するには、環境変数 XPG_SUS_ENV を ON に設定し、 XPG_UNIX98 を OFFに設定します。
|
| shift(引数 )。 ) | 第 1 の引数を除くすべての引数を戻します。 戻った引数には引用符が付けられて、間にコンマが付いた状態で前詰めされます。 引用符が付いているので、以降にスキャンが実行されても、その効果はありません。 |
| changequote(L、R) | 引用符記号を L と R に変更します。 長さ 5 バイトまでの記号が使えます。 引数を持たない changequote は元の値 (` ') を復元します。 |
| changconversion(L、R) | 左右のコメント・マーカーを、デフォルトの # と改行文字から L と R に変更します。 引数を付けないと、コメント機能が使用不可になります。 引数を 1 つ付けると、左マーカーがパラメーターに、右マーカーが改行文字になります。 引数を 2 つ付けると、両方のマーカーが変更されます。 長さ 5 バイトまでのコメント・マーカーが使えます。 |
| divert(数値) | 現行出力ストリームを Number に変更します。 0 から 9 の番号が付けられた 10 個の出力ストリームがあります。 最終出力は、ストリームを番号順に連結したものです。 最初は、ストリーム 0 が現行ストリームです。 m4 コマンドは、0 から 9 以外のストリームに方向転換された出力を廃棄します。 |
| undivert(Number . . . ) | 指定された逸脱 (または、引数がない場合はすべての逸脱) から即座にテキストを出力させます。 テキストは別の逸脱に方向転換を解除できます。 方向転換を解除すると、方向転換されたテキストが破棄されます。 |
| dinum (分割数) | 現行出力ストリームの値を戻します。 |
| DNL | 次の改行文字までの文字を読み取って改行文字と共に破棄します。 |
| ifelse([String1,String2,True、[False]]。 ) | String1 と String2 が同じであれば、値は True になります。 両者が同じでない場合で、かつ、5 個以上の引数がある場合は、 m4 コマンドは余分な引数 (4、5、6、7) を使ってプロセスを 繰り返します。 そうでなければ、値は False になるか、False の値を指定していなければヌルになります。 |
| incr(数値) | 引数の値を 1 だけ増やして戻します。 |
| decr(数値) | 引数の値を 1 だけ減らして戻します。 |
| eval(Expression[,Number1[,Number2 ]]) | 32 ビットの符号付き演算を使用して、第 1 引数を演算式として評価します。 演算子として +、-、*、/、%、^ (指数)、ビット単位の &、|、~、^ 関係演算子および括弧が使えます。 8 進数と 16 進数は C の場合と同じように指定できます。 Number1 は、式の結果の基数を指定します。 デフォルトの基数は 10 です。 オプションの Number2 は計算結果の最小桁数を指定します。 注: eval の動作は、Single UNIX Specification、バージョン 10 に準拠するように変更されました。 eval の以前の動作では、32 ビットの符号なし演算を使用して、第 1 引数を演算式として評価します。 デフォルトでは、 eval は UNIX 10 より前の動作と同様に動作します。 UNIX 10 の動作を取得するには、環境変数 XPG_SUS_ENV を ON に設定し、 XPG_UNIX98 を OFFに設定します。
|
| len(ストリング) | String 内のバイト数を戻します。 |
| dlen(ストリング) | String 内の表示可能文字数を戻します。つまり、2 バイトの拡張文字は 1 表示可能文字としてカウントされます。 |
| index(String1、String2) | 文字列 String1 内で文字列 String2 が始まる位置 (ゼロ原点) を戻します。また、第 2 のパラメーターが発生しなければ -1 を戻します。 |
| substr(ストリング,位置, [数値]) | String のサブストリングを戻します。 サブストリングは Position で選択され、Number はサブストリングの長さを示します。 Number を指定しなければ、サブストリングには第 1 の文字列の終わりまでのすべてのデータが含まれます。 |
| translit(ストリング、From、To) | String 内の文字を From で与えられたセットから To で与えられたセットに文字変換します。 省略形は使えません。 2 バイトの拡張文字は対応する置換文字に正しくマップされます。 |
| include(ファイル) | File の内容を戻します。そのファイルにアクセスできなければエラー・メッセージを表示します。 |
| sinclude(ファイル) | File の内容を戻しますが、File にアクセスできなくてもエラー・メッセージを表示しません。 |
| syscmd(コマンド) | Commandを実行します。 戻り値はありません。 |
| SYSVAL | syscmd への最後の呼び出しから戻りコードを戻します。 |
| maketemp(.. nnnn 。 ) | 引数内の nnnn を現行プロセス ID 番号で置換します。 |
| mkstemp(テンプレート) | template 引数内の文字列は、末尾に 6 文字以上の X 文字があるファイル名です。 mkstemp マクロはファイル名の各 X 文字を、ポータブル・ファイル名の文字セットからの文字に置き換えます。 ファイルは新たに作成されたファイル名で作成され、閉じられます。 mkstemp マクロに template 引数として空の文字列が含まれている場合、ファイルは新たに作成されたファイル名を使用して作成されず、m4 コマンドは診断メッセージを標準出力に書き込みます。 また、mkstemp マクロに template 引数として空の文字列が含まれている場合、m4 コマンドは、ファイルが作成されない場合でも入力の処理を続け、終了状況としてゼロ以外の値を返します。 |
| m4exit(値) | 即座に m4 コマンドを終了して、Value に指定された終了値 (デフォルトは 0) を戻します。 |
| m4wrap (ラストマクロ ) | ファイルの終わり文字を読み取ってから LastMacro を実行します。 例:m4wrap (`cleanup ()')m4の終わりでクリーンアップ・マクロを実行します。 |
| errprint(メッセージ) | 診断出力ファイルに Message を含めます。 |
| dumpdef([名前 .. :NONE. | 指定された項目、または、引数が与えられていない場合はすべての項目について、現在の名前と定義を標準出力に書き出します。 |
| traceon(マクロ) | Macro のトレースをオンにします。 マクロを指定しなければ、すべてのマクロのトレースがオンになります。 |
| traceoff(Macro . . . ) | グローバルなトレースおよび指定された Macro のトレースをオフにします。 traceon で特別にトレースされるマクロは、traceoff を特に呼び出さなければトレースを解除できません。 |
フラグ
| 項目 | 説明 |
|---|---|
| -B 数値 | Number 変数をプッシュ・バックおよびパラメーター収集バッファーのサイズ (デフォルトは 4096) にします。 |
| -e | 対話式で操作します。 割り込みは無視され、出力はバッファー化されません。 |
| -H 数値 | Number 変数を記号テーブル・ハッシュ・アレイのサイズ (デフォルトは 199) にします。 このサイズは、プライム記号番号でなければなりません。 |
| -I ディレクトリー | (大文字の i) 最初に Directory 変数を検索してから、標準リスト上のディレクトリー内で、/ (スラッシュ) で始まらない名前が付いたインクルード (組み込みマクロ) ファイルを検索します。 |
| -l | (L の小文字) アセンブラー用の行番号付き出力を使用可能にします (.xline . . .)。 |
| -s | C プリプロセッサー用の行同期出力を使用可能にします (#line . . .)。 |
| -S 数値 | Number 変数をコール・スタックのサイズ (デフォルトは 100 スロット) にします。 マクロはスロットを 3 つ使い、非マクロ引数は 1 つ使います。 |
| -T 数値 | Number 変数をトークン・バッファーのサイズ (デフォルトは 512 バイト) にします。 |
ファイル名の前と -D または -U フラグの前には先行フラグを指定しなければなりません。
| 項目 | 説明 |
|---|---|
| -D 名前[=値] | Name 変数を Value 変数として定義します。 Value 変数を指定しなければ、Name 変数はヌルになります。 |
| -U 名前 | -Dフラグで定義されていたName変数の定義を解除する。 |
終了状況
このコマンドは、以下の終了値を戻します。
| 項目 | 説明 |
|---|---|
| 0 | 正常終了。 |
| >0 | エラーが発生しました。 |
m4exit マクロを使用した場合、終了値は入力ファイルによって指定できます。
例
m4 コマンドを使って C 言語プログラムをプリプロセスしコンパイルするには、次のように入力します。
m4 prog.m4 > prog.c
cc prog.cファイル
| 項目 | 説明 |
|---|---|
| /usr/ccs/bin/m4 | m4 コマンドが入っています。 |