(cpp) The Standard Unixmacro-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. ThiSSymbol 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)