引用宏的实参有什么意义?

  • 本文关键字:实参 引用 macros m4
  • 更新时间 :
  • 英文 :


阅读m4宏语言的文档,我发现了这个例子:

changequote([,])dnl
define([gl_STRING_MODULE_INDICATOR],
[dnl comment
GNULIB_[]translit([[$1]], [a-z], [A-Z])=1dnl
])dnl
gl_STRING_MODULE_INDICATOR([strcase])

生产:

GNULIB_STRCASE=1

但是如果省略引用strcase,我们得到相同的结果:

gl_STRING_MODULE_INDICATOR(strcase)

生产

GNULIB_STRCASE=1

为什么引用strcase?

如果strcase被定义为宏,则需要引号。例如,如果我们有define(strcase, foo),那么gl_STRING_MODULE_INDICATOR(strcase)将首先扩展为gl_STRING_MODULE_INDICATOR(foo),然后扩展为GNULIB_FOO=1

一般来说,当某些单词意外地被定义为宏时,编写良好的m4输入将继续起作用。

最新更新