Next: Changequote Up: Input Control
8.1 Deleting whitespace in input
The builtin `dnl' stands for "Discard to Next Line":
-- Builtin: dnl
All characters, up to and including the next newline, are discarded
without performing any macro expansion. A warning is issued if
the end of the file is encountered without a newline.
The expansion of `dnl' is void.
It is often used in connection with `define', to remove the newline
that follows the call to `define'. Thus
define(`foo', `Macro `foo'.')dnl A very simple macro, indeed.
The input up to and including the next newline is discarded, as
opposed to the way comments are treated (Note: Comments).
Usually, `dnl' is immediately followed by an end of line or some
other whitespace. GNU `m4' will produce a warning diagnostic if `dnl'
is followed by an open parenthesis. In this case, `dnl' will collect
and process all arguments, looking for a matching close parenthesis.
All predictable side effects resulting from this collection will take
place. `dnl' will return no output. The input following the matching
close parenthesis up to and including the next newline, on whatever
line containing it, will still be discarded.
dnl(`args are ignored, but side effects occur',
define(`foo', `like this')) while this text is ignored: undefine(`foo')
error-->m4:stdin:1: Warning: excess arguments to builtin `dnl' ignored
See how `foo' was defined, foo?
=>See how foo was defined, like this?
If the end of file is encountered without a newline character, a
warning is issued and dnl stops consuming input.
')0 hi dnl 1 hi')
error-->m4:stdin:1: Warning: end of file treated as newline
=>0 HI 2 HI
automatically generated by info2www