DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(cpp) Global Actions

Info Catalog (cpp) Top (cpp) Top (cpp) Directives
 
 Transformations Made Globally
 =============================
 
    Most C preprocessor features are inactive unless you give specific
 directives to request their use.  (Preprocessing directives are lines
 starting with `#';  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 (
      Predefined.).
 
    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 below).
 
      /*
      */ # /*
      */ defi\
      ne FO\
      O 10\
      20
 
 is equivalent into `#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
 
      "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.)
 
    But 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.   Invocation.
 
Info Catalog (cpp) Top (cpp) Top (cpp) Directives
automatically generated byinfo2html