M4 预处理器中的字符串长度

String-length in the M4 preprocessor

所以,通过这个简单的输入,

define(foo, len()) foo(abcdef)

我得到,作为输出:

 2

我怎样才能打印 5?我无法弄清楚使 len() 实际上收到 </code>、<code>abcdef 的值而不是文字字符串 `'.

编辑 1: 有问题的实际代码如下所示:

define(`FILE', `#' /!\  /!\
`#' ====substr(==============================,0,len())====)dnl
FILE(`UTILITY.ASM')

len() 的低引号导致它在定义步骤中立即求值,因此 foo 被定义为 2。

即这相当于:

define(foo, 2) foo(abcdef)

完全引用时,结果如你所料:

define(`foo', `len()') foo(`abcdef')
> 6