DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(m4.info.gz) Arguments

Info Catalog (m4.info.gz) Define (m4.info.gz) Definitions (m4.info.gz) Pseudo Arguments
 
 4.2 Arguments to macros
 =======================
 
 Macros can have arguments.  The Nth argument is denoted by `$n' in the
 expansion text, and is replaced by the Nth actual argument, when the
 macro is expanded.  Replacement of arguments happens before rescanning,
 regardless of how many nesting levels of quoting appear in the
 expansion.  Here is an example of a macro with two arguments.  It
 simply exchanges the order of the two arguments.
 
      define(`exch', `$2, $1')
      =>
      exch(`arg1', `arg2')
      =>arg2, arg1
 
    This can be used, for example, if you like the arguments to `define'
 to be reversed.
 
      define(`exch', `$2, $1')
      =>
      define(exch(``expansion text'', ``macro''))
      =>
      macro
      =>expansion text
 
     Quoting Arguments, for an explanation of the double quotes.
 (You should try and improve this example so that clients of `exch' do
 not have to double quote.   Answers)
 
    GNU `m4' allows the number following the `$' to consist of one or
 more digits, allowing macros to have any number of arguments.  This is
 not so in UNIX implementations of `m4', which only recognize one digit.
 
    As a special case, the zeroth argument, `$0', is always the name of
 the macro being expanded.
 
      define(`test', ``Macro name: $0'')
      =>
      test
      =>Macro name: test
 
    If you want quoted text to appear as part of the expansion text,
 remember that quotes can be nested in quoted strings.  Thus, in
 
      define(`foo', `This is macro `foo'.')
      =>
      foo
      =>This is macro foo.
 
 The `foo' in the expansion text is _not_ expanded, since it is a quoted
 string, and not a name.
 
Info Catalog (m4.info.gz) Define (m4.info.gz) Definitions (m4.info.gz) Pseudo Arguments
automatically generated byinfo2html