Next: Incompatibilities, Up: Compatibility
m4This version of m4 contains a few facilities that do not exist
in System V m4. These extra facilities are all suppressed by
using the -G command line option (see Invoking m4), unless
overridden by other command line options.
$n notation for macro arguments, n can contain
several digits, while the System V m4 only accepts one digit.
This allows macros in GNU m4 to take any number of
arguments, and not only nine (see Arguments).
This means that define(`foo', `$11') is ambiguous between
implementations. To portably choose between grabbing the first
parameter and appending 1 to the expansion, or grabbing the eleventh
parameter, you can do the following:
define(`a1', `A1')
=>
dnl First argument, concatenated with 1
define(`_1', `$1')define(`first1', `_1($@)1')
=>
dnl Eleventh argument, portable
define(`_9', `$9')define(`eleventh', `_9(shift(shift($@)))')
=>
dnl Eleventh argument, GNU style
define(`Eleventh', `$11')
=>
first1(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k')
=>A1
eleventh(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k')
=>k
Eleventh(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k')
=>k
divert (see Divert) macro can manage more than 9
diversions. GNU m4 treats all positive numbers as valid
diversions, rather than discarding diversions greater than 9.
include and sinclude are sought in a
user specified search path, if they are not found in the working
directory. The search path is specified by the -I option and the
M4PATH environment variable (see Search Path).
undivert can be non-numeric, in which case the named
file will be included uninterpreted in the output (see Undivert).
format builtin, which
is modeled after the C library function printf (see Format).
regexp (see Regexp) and patsubst
(see Patsubst) builtins.
m4 with
esyscmd (see Esyscmd).
builtin
(see Builtin).
indir (see Indir).
__program__,
__file__, and __line__ (see Location).
dumpdef and macro tracing can be
controlled with debugmode (see Debug Levels).
debugfile (see Debug Output).
In addition to the above extensions, GNU m4 implements the
following command line options: -F, -G, -I,
-L, -R, -V, -W, -d, -i,
-l, --debugfile and -t. See Invoking m4, for a
description of these options.
Also, the debugging and tracing facilities in GNU m4 are much
more extensive than in most other versions of m4.