DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(m4.info) Pseudo Arguments

Info Catalog (m4.info) Arguments (m4.info) Definitions (m4.info) Undefine
 
 Special arguments to macros
 ===========================
 
    There is a special notation for the number of actual arguments
 supplied, and for all the actual arguments.
 
    The number of actual arguments in a macro call is denoted by `$#' in
 the expansion text.  Thus, a macro to display the number of arguments
 given can be
 
      define(`nargs', `$#')
      =>
      nargs
      =>0
      nargs()
      =>1
      nargs(arg1, arg2, arg3)
      =>3
 
    The notation `$*' can be used in the expansion text to denote all
 the actual arguments, unquoted, with commas in between.  For example
 
      define(`echo', `$*')
      =>
      echo(arg1,    arg2, arg3 , arg4)
      =>arg1,arg2,arg3 ,arg4
 
    Often each argument should be quoted, and the notation `$@' handles
 that.  It is just like `$*', except that it quotes each argument.  A
 simple example of that is:
 
      define(`echo', `$@')
      =>
      echo(arg1,    arg2, arg3 , arg4)
      =>arg1,arg2,arg3 ,arg4
 
    Where did the quotes go?  Of course, they were eaten, when the
 expanded text were reread by `m4'.  To show the difference, try
 
      define(`echo1', `$*')
      =>
      define(`echo2', `$@')
      =>
      define(`foo', `This is macro `foo'.')
      =>
      echo1(foo)
      =>This is macro This is macro foo..
      echo2(foo)
      =>This is macro foo.
 
  Trace, if you do not understand this.
 
    A `$' sign in the expansion text, that is not followed by anything
 `m4' understands, is simply copied to the macro expansion, as any other
 text is.
 
      define(`foo', `$$$ hello $$$')
      =>
      foo
      =>$$$ hello $$$
 
    If you want a macro to expand to something like `$12', put a pair of
 quotes after the `$'.  This will prevent `m4' from interpreting the `$'
 sign as a reference to an argument.
 
Info Catalog (m4.info) Arguments (m4.info) Definitions (m4.info) Undefine
automatically generated byinfo2html