(x86_64-linux-gnu-cppinternals-11.info)Top


Next: Conventions Up: (dir)
Enter node , (file) or (file)node

The GNU C Preprocessor Internals
********************************

Conventions
Lexer
Hash Nodes
Macro Expansion
Token Spacing
Line Numbering
Guard Macros
Files
Concept Index
1 Cpplib--the GNU C Preprocessor
********************************
The GNU C preprocessor is implemented as a library, "cpplib", so it can
be easily shared between a stand-alone preprocessor, and a preprocessor
integrated with the C, C++ and Objective-C front ends.  It is also
available for use by other programs, though this is not recommended as
its exposed interface has not yet reached a point of reasonable
stability.

   The library has been written to be re-entrant, so that it can be used
to preprocess many files simultaneously if necessary.  It has also been
written with the preprocessing token as the fundamental unit; the
preprocessor in previous versions of GCC would operate on text strings
as the fundamental unit.

   This brief manual documents the internals of cpplib, and explains
some of the tricky issues.  It is intended that, along with the comments
in the source code, a reasonably competent C programmer should be able
to figure out what the code is doing, and why things have been
implemented the way they have.

Conventions
Conventions used in the code.
Lexer
The combined C, C++ and Objective-C Lexer.
Hash Nodes
All identifiers are entered into a hash table.
Macro Expansion
Macro expansion algorithm.
Token Spacing
Spacing and paste avoidance issues.
Line Numbering
Tracking location within files.
Guard Macros
Optimizing header files with guard macros.
Files
File handling.
Concept Index
Index.