The following macros give some control over the order of the evaluation by adding or removing levels of quotes. They are meant for hard-core M4 programmers.
The following example aims at emphasizing the difference between (i), not
using these macros, (ii), using
m4_quote, and (iii), using
$ cat example.m4 # Overquote, so that quotes are visible. m4_define([show], [$1 = [$1], $@ = [$@]]) m4_divert(0)dnl show(a, b) show(m4_quote(a, b)) show(m4_dquote(a, b)) $ autom4te -l m4sugar example.m4 $1 = a, $@ = [a],[b] $1 = a,b, $@ = [a,b] $1 = [a],[b], $@ = [[a],[b]]