Copyright (C) 2000-2012 |
GNU Info (m4.info)Pseudo ArgumentsSpecial 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. Note: 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. automatically generated by info2www version 1.2.2.9 |