是否可以定义一个 m4 宏(不带参数),在第一次调用时扩展为 1,在第二次调用时扩展为 2,依此类推?换句话说,它应该有内部存储器来存储它被调用的次数。这可以做到吗?
答案1
您可以通过使用两个宏来做到这一点,一个counter
保存当前值,一个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