
最初の呼び出しでは1に、2番目の呼び出しでは2に拡張するm4マクロ(パラメータなし)を定義できますか?つまり、呼び出された回数を格納できる内部メモリが必要です。これは可能ですか?
答え1
counter
2つのマクロ、つまり現在の値を格納するマクロとcount
その値に展開し、「カウンタ」をオーバーライドするマクロを使用してこれを実行できます。たとえば、次のようになります。
define(`counter',`0')dnl
define(`count',`define(`counter',eval(counter+1))counter')dnl
count
このマクロを使用すると、最初に次のcounter
値を保存するようにオーバーライドされ、次に(現在の値を1ずつ増やして)その値が使用されます。
単一のマクロを使用してこれを行う方法がわかりません。したがって、これがあなたの質問の重要な側面である場合、これは答えではありません。
答え2
私はGNUメーリングリストに同様の質問をしましたm4-discuss
。 Doug McIlroyは、次のコードに返信して共有しました。
define(bump,`define(`$1',incr($1))')dnl
define(counter,0)dnl
counter
bump(`counter')counter
bump(`counter')counter