3

我在 autoconf 代码中看到很多关于被 dnl'ed 而不是 dnl'ed 的东西。什么是 dnl'ed?

4

2 回答 2

7

来自GNU M4 1.4.13 宏处理器手册:

8.1 删除输入中的空格

内置dnl代表“丢弃到下一行”:

— 内置:dnl

所有字符,包括下一个换行符在内,都将被丢弃而不执行任何宏扩展。如果在没有换行符的情况下遇到文件末尾,则会发出警告。

的扩展dnl是无效的。

它通常与 , 结合使用define,以删除调用 . 之后的换行符define。因此

   define(`foo', `Macro `foo'.')dnl A very simple macro, indeed.
   foo
   ⇒Macro foo.

直到和包括下一个换行符的输入被丢弃,与处理评论的方式相反(参见评论)。

[...]

于 2009-10-27T19:25:17.970 回答
2

IIRC,dnldo-next-line。它只是跳过当前行的其余部分。这就是您在 M4 文件中编写注释的方式。

dnl preprocessor will eat this
but not this dnl though this

将产生结果文档

but not this

(未经测试;也可能会终止空闲进程或使硬盘崩溃)。

于 2009-10-27T19:18:27.327 回答