(m4.info.gz) Other Incompatibilities
15.3 Other incompatibilities
There are a few other incompatibilities between this implementation of
`m4', and the System V version.
* GNU `m4' implements sync lines differently from System V `m4',
when text is being diverted. GNU `m4' outputs the sync lines when
the text is being diverted, and System V `m4' when the diverted
text is being brought back.
The problem is which lines and file names should be attached to
text that is being, or has been, diverted. System V `m4' regards
all the diverted text as being generated by the source line
containing the `undivert' call, whereas GNU `m4' regards the
diverted text as being generated at the time it is diverted.
The sync line option is used mostly when using `m4' as a front end
to a compiler. If a diverted line causes a compiler error, the
error messages should most probably refer to the place where the
diversion were made, and not where it was inserted again.
* GNU `m4' makes no attempt at prohibiting self-referential
define(`x', `x ')
There is nothing inherently wrong with defining `x' to return `x'.
The wrong thing is to expand `x' unquoted. In `m4', one might
use macros to hold strings, as we do for variables in other
programming languages, further checking them with:
ifelse(defn(`HOLDER'), `VALUE', ...)
In cases like this one, an interdiction for a macro to hold its own
name would be a useless limitation. Of course, this leaves more
rope for the GNU `m4' user to hang himself! Rescanning hangs may
be avoided through careful programming, a little like for endless
loops in traditional programming languages.
automatically generated byinfo2html