GNU Info

Info Node: (autoconf.info)Active Characters

(autoconf.info)Active Characters


Next: One Macro Call Up: M4 Quotation
Enter node , (file) or (file)node

Active Characters
-----------------

   To fully understand where proper quotation is important, you first
need to know what are the special characters in Autoconf: `#' introduces
a comment inside which no macro expansion is performed, `,' separates
arguments, `[' and `]' are the quotes themselves, and finally `(' and
`)' (which `m4' tries to match by pairs).

   In order to understand the delicate case of macro calls, we first
have to present some obvious failures.  Below they are "obvious-ified",
although you find them in real life, they are usually in disguise.

   Comments, introduced by a hash and running up to the newline, are
opaque tokens to the top level: active characters are turned off, and
there is no macro expansion:

     # define([def], ine)
     =># define([def], ine)

   Each time there can be a macro expansion, there is a quotation
expansion; i.e., one level of quotes is stripped:

     int tab[10];
     =>int tab10;
     [int tab[10];]
     =>int tab[10];

   Without this in mind, the reader will try hopelessly to use her macro
`array':

     define([array], [int tab[10];])
     array
     =>int tab10;
     [array]
     =>array

How can you correctly output the intended results(1)?

   ---------- Footnotes ----------

   (1) Using `defn'.


automatically generated by info2www version 1.2.2.9