The Free On-line Dictionary of Computing (30 December 2018):
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)