Next: Incompatibilities, Up: Compatibility [Contents][Index]
This 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
Also see the argn
macro (see Shift).
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. Some BSD implementations use
extended regular expressions instead.
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).
maketemp
(see Mkstemp) macro behaves like mkstemp
,
creating a new file with a unique name on every invocation, rather than
following the insecure behavior of replacing the trailing ‘X’
characters with the m4
process id.
The debugging and tracing facilities in GNU m4
are much
more extensive than in most other versions of m4
.
Next: Incompatibilities, Up: Compatibility [Contents][Index]