8.1.2 One Macro Call
Let’s proceed on the interaction between active characters and macros
with this small macro, which just returns its first argument:
The two pairs of quotes above are not part of the arguments of
define
; rather, they are understood by the top level when it
tries to find the arguments of define
. Therefore, assuming
car
is not already defined, it is equivalent to write:
But, while it is acceptable for a ‘configure.ac’ to avoid unnecessary
quotes, it is bad practice for Autoconf macros which must both be more
robust and also advocate perfect style.
At the top level, there are only two possibilities: either you
quote or you don’t:
| car(foo, bar, baz)
⇒foo
[car(foo, bar, baz)]
⇒car(foo, bar, baz)
|
Let’s pay attention to the special characters:
| car(#)
error-->EOF in argument list
|
The closing parenthesis is hidden in the comment; with a hypothetical
quoting, the top level understood it this way:
Proper quotation, of course, fixes the problem:
Here are more examples:
| car(foo, bar)
⇒foo
car([foo, bar])
⇒foo, bar
car((foo, bar))
⇒(foo, bar)
car([(foo], [bar)])
⇒(foo
define([a], [b])
⇒
car(a)
⇒b
car([a])
⇒b
car([[a]])
⇒a
car([[[a]]])
⇒[a]
|