Minden C(++) fordítóprogram szerves részét képezi egy ún. elõfeldolgozó (preprocesszor). A fordítóprogram és a preprocesszor kapcsolatát úgy kell elképzelni, hogy a tulajdonképpeni fordító nem is látja a forrásszöveget, hanem csak azt, amit ebbõl az elõfeldolgozó készít a számára. Ezt a 1.1. ábrán látható módon képzelhetjük el. Jellemzõ az ábrán látható együttmûködésre, hogy a belsõ fordító nem ismeri a megjegyzések szintaxisát, ugyanis nincs rá szüksége: a neki átadott sorokból az elõfeldolgozó azokat "kiírtja". A BORLAND C++ integrált fejesztõi rendszerénél a két rész kapcsolata olyan szoros, hogy nincs is lehetõség az elõfeldolgozó kimenetének a megtekintésére. Ehhez egy külön segédprogramot (CPP utility) találunk a programcsomagban. Ez szolgál arra, hogy a forrásszövegbõl elõállítsa az elõfeldolgozó kimenetét egy .i kiterjesztésû file-ba, így láthatóvá téve, hogy ténylegesen mi kerül át a belsõ fordítónak.
Az elõfeldolgozó egy sororientált szövegfeldolgozó
(más szóval makrónyelv), ami semmit sem "tud" a C
nyelvrõl. Ez két fontos következménnyel jár:
az elõfeldolgozónak szóló utasításokat
nem írhatjuk olyan kötetlen formában, mint az egyéb
C utasításokat (tehát egy sorba csak egy utasítás
kerülhet és a parancsok nem lóghatnak át másik
sorba, hacsak nem jelöljük ki folytatósornak); másrészt
minden, amit az elõfeldolgozó mûvel, szigorúan
csak szövegmanipuláció, függetlenül attól,
hogy C nyelvi alapszavakon, kifejezéseken vagy változókon
dolgozik. A preprocesszornak szóló parancsokat a sor elején
(esetleg szóközök és/vagy tabulátorok után)
álló # karakter jelzi.