Ng> (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. 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)