Source : Free On-Line Dictionary of Computing
C preprocessor
(cpp) The standard {Unix}
{macro}-expansion utility run as the first phase of the {C}
compiler, {cc}. Cpp interprets lines beginning with "#" such
as
#define BUFFER_SIZE 256
as a textual {assignment} giving the symbol BUFFER_SIZE a
value "256". Symbols defined with cpp are traditionally given
upper case names to distinguish them from C identifiers. This
symbol can be used later in the input, as in
char input_buffer[BUFFER_SIZE];
This use of cpp to name constants, rather than writing these
{magic numbers} inline, makes a program easier to read and
maintain, especially if there is more than one occurrence of
BUFFER_SIZE all of which must all have the same value.
Cpp macros can have parameters:
#define BIT(n) (1<<(n))
This can be used with any appropriate actual argument:
msb = BIT(nbits-1);
Note the parentheses around the "n" in the definition of BIT.
Without these, operator precedence might mean that the
expression substituted in place of n might not be interpreted
correctly (though the example above would be OK).
Cpp also supports conditional compilation with the use of
#ifdef SYMBOL
...
#else
...
#endif
and
#if EXPR
...
#else
...
#endif
constructs, where SYMBOL is a Cpp symbol which may or may not
be defined and EXPR is an arithmetic expression involving only
Cpp symbols, constants and C operators which Cpp can evaluate
to a constant at {compile time}.
{Decus cpp} is a free implementation for {VMS}.
The most widely used C preprocessor today is the {GNU} CPP,
distributed as part of {GCC}.
(2001-12-31)