プログラミングユーティリティ

演算用の組み込みマクロ

m4 には、整数演算を行う 3 つの組み込みマクロがあります。incr() は、その数値の引数を 1 ずつ増やします。decr() は、1 ずつ減らします。したがって、プログラミングでよく使われる「N より 1 大きい」変数を定義するには、以下のように incr() を使用します。

define(N, 100) 
define(N1, `incr(N)')

つまり、N1N の現在値よりも 1 大きい値として定義されます。

演算でよく用いられるメカニズムは、eval() という組み込みマクロです。このマクロでは、整数に対して任意の演算を行うことができます。以下に、このマクロの演算子を優先度が高いものから順に示します。

+ - (単項)
(**(** 
(** / % 
+ - 
== != < <= > >= 
! ‾ 
& 
| ^ 
&& 
|| 

必要に応じて、括弧を使用して演算をグループ化できます。eval() に最終的に渡される式のオペランドは、すべて数値でなければなりません。真の関係 (たとえば、1 > 0) は 1、偽の関係は 0 になります。eval() の精度は 32 ビットです。

簡単な例を以下に示します。この例では、M2(**(**N+1 として定義しています。

define(M, `eval(2(**(**N+1)')

この場合、以下の結果は 9 になります。

define(N, 3) 
M(2)