Next: Quotation and Nested Macros, Previous: Active Characters, Up: M4 Quotation
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]
   With this in mind, we can explore the cases where macros invoke macros....