File: autoconf.info, Node: One Macro Call, Next: Quoting and Parameters, Prev: Active Characters, Up: M4 Quotation 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: 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, assuming ‘car’ is not already defined, it is equivalent to write: define(car, $1) 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: car([#)] Proper quotation, of course, fixes the problem: car([#]) ⇒# 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]