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

adg*_*adg 1 macro m4

是否可以定义一个 m4 宏(不带参数),在第一次调用时扩展为 1,在第二次调用时扩展为 2,依此类推?换句话说,它应该有内部存储器来存储它被调用的次数。这可以做到吗?

小智 5

您可以通过使用两个宏来做到这一点,一个counter保存当前值,一个count扩展为该值并重新定义“计数器”的宏。例如,它可能看起来像这样

define(`counter',`0')dnl
define(`count',`define(`counter',eval(counter+1))counter')dnl
Run Code Online (Sandbox Code Playgroud)

count当使用该宏时,它首先重新定义counter以保存其下一个值(将其当前值加 1),然后使用该值。

我不确定如何使用单个宏来做到这一点,如果这是您问题的一个重要方面,那么这不是答案。