Note that unlike certain previous macro processors inside assemblers, the C preprocessor is not Turing-complete because it lacks the ability to either loop or " go to ", the latter allowing programs to loop.
12.
A "'general-purpose macro processor "'or "'general purpose preprocessor "'is a macro processor that is not tied to or integrated with a particular language or piece of software.
13.
A "'general-purpose macro processor "'or "'general purpose preprocessor "'is a macro processor that is not tied to or integrated with a particular language or piece of software.
14.
The language was designed by Brian Kernighan and Dennis Ritchie for the original versions of UNIX . It is an extension of an earlier macro processor "'m3 "', written by Ritchie for the AP-3 minicomputer.
15.
However, since the C preprocessor does not have features of some other preprocessors, such as recursive macros, selective expansion according to quoting, string evaluation in conditionals, and Turing completeness, it is very limited in comparison to a more general macro processor such as m4.
16.
Macro processors have been used for language expansion ( defining new language constructs that can be expressed in terms of existing language components ), for systematic text replacements that require decision making, and for text reformatting ( e . g . conditional extraction of material from an HTML file ).
17.
Early contributors included Rick Meyers ( project lead and MPW Shell command interpreter ), Jeff Parrish ( MPW Shell editor ), Dan Smith ( MPW Shell commands ), Ira Ruben ( assembler and many of the tools including Backup, PasMat, and more ), Fred Forsman ( Make, Print, SADE, and assembler macro processor ), Al Hoffman ( Pascal compiler ) Roger Lawrence ( Pascal and C compilers, including the error messages ), Ken Friedenbach ( linker ), Johan Strandberg ( Rez, DeRez, RezDet ), Steve Hartwell ( C libraries ), and Dan Allen ( MacsBug, editor ).