One Macro Call
--------------
Let's proceed on the interaction between active characters and macros
with this small macro, which just returns its first argument:
define([car], [$1])
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, it is equivalent to write:
define(car, $1)
But, while it is acceptable for a `configure.ac' to avoid unneeded
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 possible quotings: 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:
car([#)]
Proper quotation, of course, fixes the problem:
car([#])
=>#
The reader will easily understand the following examples:
car(foo, bar)
=>foo
car([foo, bar])
=>foo, bar
car((foo, bar))
=>(foo, bar)
car([(foo], [bar)])
=>(foo
car([], [])
=>
car([[]], [[]])
=>[]
With this in mind, we can explore the cases where macros invoke
macros...