Go to the first, previous, next, last section, table of contents.
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...
Go to the first, previous, next, last section, table of contents.