f78
Transformations Made Globally
Contents|Index|Previous|Next
Transformations
made globally
Most
C preprocessor features are inactive unless you give specific directives
to request their use. (Preprocessing directives are lines starting with
#;
see Preprocessing
directives ). But there are three transformations
that the preprocessor always makes on all the input it receives, even in
the absence of directives.
-
All C comments are replaced
with single spaces.
-
Backslash-Newline sequences
are deleted, no matter where. This feature allows you to break long lines
for cosmetic purposes without changing their meaning.
-
Predefined macro names are replaced
with their expansions (see Predefined
macros).
The first
two transformations are done before nearly all other parsing and
before preprocessing directives are recognized. Thus, for example, you
can split a line cosmetically with Backslash-Newline anywhere (except when
trigraphs are in use; see the following example and its description).
/*
*/ # /*
*/ defi\
ne FO\
O 10\
20
This input
has the equivalent of #define
FOO 1020. You
can split even an escape sequence with Backslash-Newline. For example,
you can split "foo\bar"
between the \
and the b
to get the following sequence.
"foo\\
bar"
This behavior
is unclean: in all other contexts, a Backslash can be inserted in a string
constant as an ordinary character by writing a double Backslash, and this
creates an exception. But the ANSI C standard requires it. (Strict ANSI
C does not allow Newlines in string constants, so they do not consider
this a problem.)
There
are a few exceptions to all three transformations.
-
C comments and predefined macro
names are not recognized inside a #include
directive in which the file name is delimited with <
and >.
-
C comments and predefined macro
names are never recognized within a character or string constant. (Strictly
speaking, this is the rule, not an exception, but it is worth noting here
anyway.)
-
Backslash-Newline may not safely
be used within an ANSI trigraph. Trigraphs are converted before Backslash-Newline
is deleted. If you write what looks like a trigraph with a Backslash-Newline
inside, the Backslash-Newline is deleted as usual, but it is then too late
to recognize the trigraph.
This exception is relevant only
if you use the -trigraphs
option to enable trigraph processing. See Invoking
the C preprocessor .
0