阅读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输入将继续起作用。