cpp : The preprocessing language

table of contents

  Overview
  Header Files
  Macros
  Conditionals
  Diagnostics
  Line Control
  Pragmas
  Other Directives
  Preprocessor Output
  Traditional Mode
  Implementation Details
  Invocation
  Environment Variables
  GNU Free Documentation License
  Index of Directives
  Option Index
  Concept Index
  Initial processing
  Tokenization
  The preprocessing language
  Include Syntax
  Include Operation
  Search Path
  Once-Only Headers
  Computed Includes
  Wrapper Headers
  System Headers
  Object-like Macros
  Function-like Macros
  Macro Arguments
  Stringification
  Concatenation
  Variadic Macros
  Predefined Macros
  Undefining and Redefining Macros
  Directives Within Macro Arguments
  Macro Pitfalls
  Standard Predefined Macros
  Common Predefined Macros
  System-specific Predefined Macros
  C++ Named Operators
  Misnesting
  Operator Precedence Problems
  Swallowing the Semicolon
  Duplication of Side Effects
  Self-Referential Macros
  Argument Prescan
  Newlines in Arguments
  Conditional Uses
  Conditional Syntax
  Deleted Code
  Ifdef
  If
  Defined
  Else
  Elif
  Implementation-defined behavior
  Implementation limits
  Obsolete Features
  Differences from previous versions
  Assertions
  Obsolete once-only headers

The preprocessing language ========================== After tokenization, the stream of tokens may simply be passed straight to the compiler's parser. However, if it contains any operations in the "preprocessing language", it will be transformed first. This stage corresponds roughly to the standard's "translation phase 4" and is what most people think of as the preprocessor's job. The preprocessing language consists of "directives" to be executed and "macros" to be expanded. Its primary capabilities are: * Inclusion of header files. These are files of declarations that can be substituted into your program. * Macro expansion. You can define "macros", which are abbreviations for arbitrary fragments of C code. The preprocessor will replace the macros with their definitions throughout the program. Some macros are automatically defined for you. * Conditional compilation. You can include or exclude parts of the program according to various conditions. * Line control. If you use a program to combine or rearrange source files into an intermediate file which is then compiled, you can use line control to inform the compiler where each source line originally came from. * Diagnostics. You can detect problems at compile time and issue errors or warnings. There are a few more, less useful, features. Except for expansion of predefined macros, all these operations are triggered with "preprocessing directives". Preprocessing directives are lines in your program that start with `#'. Whitespace is allowed before and after the `#'. The `#' is followed by an identifier, the "directive name". It specifies the operation to perform. Directives are commonly referred to as `#NAME' where NAME is the directive name. For example, `#define' is the directive that defines a macro. The `#' which begins a directive cannot come from a macro expansion. Also, the directive name is not macro expanded. Thus, if `foo' is defined as a macro expanding to `define', that does not make `#foo' a valid preprocessing directive. The set of valid directive names is fixed. Programs cannot define new preprocessing directives. Some directives require arguments; these make up the rest of the directive line and must be separated from the directive name by whitespace. For example, `#define' must be followed by a macro name and the intended expansion of the macro. A preprocessing directive cannot cover more than one line. The line may, however, be continued with backslash-newline, or by a block comment which extends past the end of the line. In either case, when the directive is processed, the continuations have already been merged with the first line to make one long line.
back to top

cpp : The preprocessing language table of contents   Overview   Header Files   Macros   Conditionals   Diagnostics   Line Control   Pragmas   Other Directives   Preprocessor Output   Traditional Mode   Implementation Details   Invocation   Environment Variables   GNU Free Documentation License   Index of Directives   Option Index   Concept Index   Initial processing   Tokenization   The preprocessing language   Include Syntax   Include Operation   Search Path   Once-Only Headers   Computed Includes   Wrapper Headers   System Headers   Object-like Macros   Function-like Macros   Macro Arguments   Stringification   Concatenation   Variadic Macros   Predefined Macros   Undefining and Redefining Macros   Directives Within Macro Arguments   Macro Pitfalls   Standard Predefined Macros   Common Predefined Macros   System-specific Predefined Macros   C++ Named Operators   Misnesting   Operator Precedence Problems   Swallowing the Semicolon   Duplication of Side Effects   Self-Referential Macros   Argument Prescan   Newlines in Arguments   Conditional Uses   Conditional Syntax   Deleted Code   Ifdef   If   Defined   Else   Elif   Implementation-defined behavior   Implementation limits   Obsolete Features   Differences from previous versions   Assertions   Obsolete once-only headers