Go to main content
マニュアルページ セク ション 1: ユー ザーコマンド

印刷ビューの終了

更新: 2016年12月6日
 
 

m4(1)

名前

m4 - マクロプロセッサ

形式

/usr/bin/m4 [-e] [-s] [
-B int] [-H 
int] [-S int] 
     [-T int] [-D
name [=val]] ... [-U 
name] ... [file]...
/usr/xpg4/bin/m4 [-e] [-s
] [-B int] [-H 
int] [-S int] 
     [-T int] [-D
name [...=val]] [-U 
name] ... [file]...

説明

m4 ユーティリティーは、C、アセンブラ、およびその他の言語のフロントエンドとして設計されたマクロプロセッサです。引数の各ファイルは順に処理されます。ファイルが存在しないか、ファイルが - の場合、標準入力が読み取られます。処理されたテキストは標準出力に書き込まれます。注: m4 には 9 つを超えて入れ子にしたファイルを含めることができず、この数値を超えると診断メッセージが書き込まれます。

マクロの構文

マクロ呼び出しの書式は、次のとおりです。

name(arg1,
arg2, ..., argn)

マクロの名前の直後に左括弧文字 ( が必要です。定義されたマクロの名前の後に ( が続かない場合は、引数を持たないマクロの呼び出しであるとみなされます。指定可能なマクロ名は英数字とアンダースコア (_) で構成され、最初の文字は数字はありません。

引用符で囲まれていない先頭の空白、TAB、および NEWLINE は、引数を収集するときに無視されます。文字列を引用符で囲む場合、左と右の一重引用符が使用されます。引用符で囲んだ文字列の値は、引用符を除いた文字列です。

マクロの処理

マクロ名が認識されると、マクロの引数は、対応する右括弧を検索することによって収集されます。指定された引数が、マクロ定義内の引数より少ない場合、後方の引数は NULL とみなされます。マクロの評価は通常、引数を収集している間に行われ、入れ子にされた呼び出しの値の内部に見つかったすべてのコンマまたは右括弧は、元の入力テキスト内のものと同様の効果があります。引数の収集後、マクロの値は入力ストリームにプッシュバックされて再スキャンされます。

オプション

オプションとその効果は次のとおりです。

–Bint

プッシュバックおよび引数収集バッファーのサイズをデフォルトの 4,096 から変更します。ゼロ以下のサイズの値は無視され、デフォルト値が使用されます。

–e

対話形式で動作します。割り込みは無視され、出力はバッファーされません。

–Hint

シンボルテーブルハッシュ配列のサイズをデフォルトの 199 から変更します。パフォーマンスを向上させるには、サイズを素数とする必要があります。ゼロ以下のサイズの値は無視され、デフォルト値が使用されます。

–s

C プリプロセッサ用のライン同期出力を有効化します (#line . . . )

–Sint

呼び出しスタックのサイズをデフォルトの 100 スロットから変更します。マクロは 3 つのスロットを使用し、マクロ以外の引数は 1 つ使用します。ゼロ以下のサイズの値は無視され、デフォルト値が使用されます。

–Tint

トークンバッファーのサイズをデフォルトの 512 バイトから変更します。ゼロ以下のサイズの値は無視され、デフォルト値が使用されます。

上記のフラグを有効にするには、すべてのファイル名の前と、次に示すすべての –D または –U フラグの前にフラグを指定する必要があります。

–D name[= val]

nameval に定義し、val が存在しない場合は NULL に定義します。

–Uname

name の定義を解除します。

オペランド

次のオペランドを指定できます。

file

処理されるテキストファイルのパス名。file を省略したり、 – を指定したりすると、標準入力から読み取られます。

使用法

m4 ユーティリティーでは次の組み込みマクロを使用できます。これらのマクロは再定義できますが、再定義を実行すると元の意味は失われます。特に指定がないかぎり、これらの値は NULL です。

changequote

引用符の記号を第 1 および第 2 の引数に変更します。記号の長さは最大 5 文字まで指定できます。changequote に引数がない場合、元の値 (つまり ` ') に復元されます。

changecom

左および右のコメントマーカーを、デフォルトの # および NEWLINE から変更します。引数を指定しない場合、コメントメカニズムは実質的に無効になります。引数が 1 つの場合、左のマーカーは引数になり、右のマーカーは NEWLINE になります。引数が 2 つの場合、両方のマーカーが影響を受けます。コメントマーカーは最大 5 文字まで指定できます。

decr

引数の値を 1 つ減らして返します。

define

2 番目の引数が、最初の引数の名前を持つマクロの値としてインストールされます。置換テキストに $ n が現れるごとに (n は数値) n 番目の引数で置換されます。引数 0 はマクロの名前で、欠落している引数は NULL 文字列で置き換えられます。$# は引数の数で置き換えられ、$* は、コンマで区切られているすべての引数のリストによって置き換えられます。$@$* に似ていますが、各引数は (現在の引用符によって) 囲まれます。

defn

引用符で囲まれた引数の定義を戻します。これは、特に組み込みマクロなどのマクロの名前を変更する場合に便利です。

divert

m4 では 10 個の出力ストリームが保持され、0 から 9 までの番号が付いています。最終出力は、ストリームを数値順に連結したものになります。初期の状態ではストリーム 0 が現行のストリームです。divert マクロは、現行の出力ストリームを (数字文字列の) 引数に変更します。0 から 9 まで以外のストリームへの出力は破棄されます。

divnum

現在の出力ストリームの値を返します。

dnl

次の NEWLINE まで文字を読み込んで破棄します。

dumpdef

指定された項目 (引数が指定されていない場合はすべての項目) について、現在の名前と定義を出力します。

errprint

診断出力ファイルに引数を出力します。

ifdef

最初の引数が定義されている場合、値は 2 番目の引数になり、それ以外の場合は 3 番目になります。3 番目の引数が存在しない場合、値は NULL です。unix という語が事前定義されています。

ifelse

このマクロには 3 つ以上の引数があります。最初の引数が 2 つ目と同じ文字列の場合、値は 3 番目の引数です。そうではなく、4 つを超える引数がある場合、プロセスは引数 4、5、6、および 7 を使用して繰り返されます。それ以外の場合、値は 4 番目の文字列になるか、存在しない場合は NULL になります。

include

引数で指定されるファイルのコンテンツを返します。

incr

引数の値を 1 つ増やして返します。引数の値は、初期の数値文字列を 10 進数として解釈して計算されます。

index

最初の引数内で 2 番目の引数が始まる位置 (ゼロ起点) を返すか、2 番目の引数が発生しない場合は -1 を返します。

len

引数内の文字数を返します。

m4exit

このマクロにより、m4 を即時終了します。指定された場合、引数 1 が終了コードで、デフォルトは 0 です。

m4wrap

引数 1 は最終の EOF にプッシュバックされます。例: m4wrap(`cleanup( )')

maketemp

引数内に文字「X」を持つ文字列に、現在のプロセス ID を入力します。

popdef

引数の現行の定義を削除し、以前の定義を公開します (ある場合)。

pushdef

define と似ていますが、以前のすべての定義を保存します。

shift

最初の引数を除くすべての引数を返します。最初の引数以外の引数は引用符で囲まれ、間にコンマが追加されてプッシュバックされます。引用符で囲むことによって、あとで実行される追加スキャンの効果を無効化します。

sinclude

このマクロは include と同じですが、ファイルにアクセスできない場合に何も表示されない点が異なります。

substr

最初の引数の部分文字列を返します。2 番目の引数は、最初の文字を選択する、ゼロを起点とする数値です。3 番目の引数は、部分文字列の長さを示します。3 番目の引数がない場合は、最初の文字列の末尾まで拡張した十分な大きさとみなされます。

syscmd

このマクロは最初の引数で指定されたコマンドを実行します。値は戻されません。

sysval

このマクロは、syscmd に対する最後の呼び出しからのリターンコードです。

translit

最初の引数内の文字を、2 番目の引数で指定されるセットから、3 番目の引数によって指定されるセットに書き直します。省略は許可されません。

traceon

このマクロは、引数を指定しない場合、すべてのマクロ (ビルトインを含む) のトレースを有効にします。それ以外の場合は、指定されたマクロのトレースを有効にします。

traceoff

指定されたマクロについて、トレースをグローバルで無効にします。

undefine

引数で指定されたマクロの定義を削除します。

undivert

このマクロによって、引数として指定された出力先から (あるいは引数がない場合はすべての出力先から) テキストの即時出力が実行されます。テキスト出力を別の出力先に逆切り替えできます。逆切り替えにより、切り替えされたテキストが破棄されます。

/usr/bin/m4

eval

32 ビット符号付き整数算術演算を使用して、引数を算術演算式として評価します。次の演算子がサポートされます。括弧、単項演算子 -、単項演算子 +、!、~、*、/、%、+、-、関係式、ビット単位の &、|、&&、||。C と同じように 8 進数および 16 進数を指定できます。2 番目の引数は結果の基数を指定し、デフォルトは 10 です。3 番目の引数は、結果の最小の桁数を指定する場合に使用できます。

/usr/xpg4/bin/m4

eval

32 ビット符号付き整数算術演算を使用して、引数を算術演算式として評価します。次の演算子がサポートされます。括弧、単項演算子 -、単項演算子 +、!、~、*、/、%、+、-、<<、>>、関係式、ビット単位の &、|、&&、||。優先順位および結合規則は C と同じです。C と同じように 8 進数および 16 進数も指定できます。2 番目の引数は結果の基数を指定し、デフォルトは 10 です。3 番目の引数は、結果の最小の桁数を指定する場合に使用できます。

使用例 1 m4 ファイルの例

ファイル m4src に次の行が含まれているとします。


The value of `VER' is "VER".
        ifdef(`VER', ``VER'' is defined to be VER., VER is not defined.)
        ifelse(VER, 1, ``VER'' is `VER'.)
        ifelse(VER, 2, ``VER'' is `VER'., ``VER'' is not 2.)
        end

この場合、コマンド

m4 m4src

またはコマンド

m4 -U VER m4src

を実行すると、出力は次のようになります。


The value of VER is "VER".
        VER is not defined.

        VER is not 2.
        end

次のコマンド

m4 -D VER m4src

を実行すると、出力は次のようになります。


The value of VER is "".
        VER is defined to be .

        VER is not 2.
        end

次のコマンド

m4 -D VER=1 m4src

を実行すると、出力は次のようになります。


The value of VER is "1".
       VER is defined to be 1.
       VER is 1.
       VER is not 2.
       end

次のコマンド

m4 -D VER=2 m4src

を実行すると、出力は次のようになります。


The value of VER is "2".
        VER is defined to be 2.

        VER is 2.
        end

環境変数

m4 の実行に影響を与える次の環境変数についての詳細は、environ(5) を参照してください。LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、および NLSPATH。

終了ステータス

次の終了ステータスが返されます。

0

正常終了。

>0

エラーが発生しました

m4exit マクロが使用される場合、終了値は入力ファイルによって指定できます。

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

/usr/bin/m4

属性タイプ
属性値
使用条件
system/core-os

/usr/xpg4/bin/m4

属性タイプ
属性値
使用条件
system/xopen/xcu4
インタフェースの安定性
確実
標準
standards(5) を参照してください。

関連項目

as(1), attributes(5), environ(5), standards(5)