GNU Info

Info Node: (autoconf.info)One Macro Call

(autoconf.info)One Macro Call


Next: Quotation and Nested Macros Prev: Active Characters Up: M4 Quotation
Enter node , (file) or (file)node

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...


automatically generated by info2www version 1.2.2.9