全局(非易失性)计数器的 m4 宏实现

全局(非易失性)计数器的 m4 宏实现

是否可以定义一个 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

相关内容