我正在尝试将if替换为if(使用GNU m4 1.4.14,并且我正在接收ERROR: end of file in argument list
尝试时:
define(`if', `if(')
define(`then', `){')
define(`fi', `}')
if foo then bar() fi
我试过转义括号,但这导致m4在说内存不足后出现错误。浏览手册,我没有发现任何与这个问题有关的东西。
当将宏的名称更改为"IF"或"IF"以外的其他名称时,它会按预期工作,这让我相信它在重复评估自己。
如果是,如何定义只计算一次的宏?否则,我应该研究什么来解决这个问题?
EDIT我找到了解决这个问题的方法,处理了两次,一次将if转换为_if,另一次将_if转换为if(。我认为有更好的方法可以做到这一点,所以在我看来这只是一个临时解决方案。
您需要防止m4
尝试重新扩展替换项。通过双重报价:
define(`if', ``if('')
define(`then', `){')
define(`fi', `}')
if foo then bar() fi