El preprocessador C és el preprocessador macro per als llenguatges de programació C, Objective-C i C++. El preprocessador ofereix la possibilitat d'incloure fitxers de capçalera, expansions de macros, compilació condicional i control de línia.
En moltes implementacions de C, és un programa independent invocat pel compilador com a primera part de la traducció.
El llenguatge de les directives del preprocessador només està dèbilment relacionat amb la gramàtica de C i, per tant, de vegades s'utilitza per processar altres tipus de fitxers de text.General-purpose text preprocessing with the C preprocessor. Featuring JavaScript
El preprocessador es va introduir a C al voltant de 1973 a instàncies d'Alan Snyder i també en reconeixement de la utilitat dels mecanismes d'inclusió de fitxers disponibles a BCPL i PL/I. La seva versió original només oferia la inclusió de fitxers i la substitució simple de cadenes utilitzant #include i #define per a macros sense paràmetres, respectivament. Es va ampliar poc després, primer per Mike Lesk i després per John Reiser, per incorporar macros amb arguments i compilació condicional.
El preprocessador C va formar part d'una llarga tradició de macrollenguatge als Laboratoris Bell, que va ser iniciat per Douglas Eastwood i Douglas McIlroy el 1959.
El preprocessament es defineix per les quatre primeres (de vuit) fases de traducció especificades a l'estàndard C.
Substitució de trígrafs: el preprocessador substitueix les seqüències de trígrafs pels caràcters que representen. Empalmament de línies: les línies d'origen físiques que continuen amb seqüències de nova línia escapades s'empalmen per formar línies lògiques. Tokenització: el preprocessador divideix el resultat en fitxes de preprocessament i espais en blanc. Substitueix els comentaris per espais en blanc. Expansió de macros i maneig de directives: s'executen línies de directives de preprocessament, inclosa la inclusió de fitxers i la compilació condicional. El preprocessador expandeix simultàniament macros i, des de la versió de 1999 de l'estàndard C, gestiona els operadors _Pragma.
Exemples Fitxers inclosos: Un dels usos més habituals del preprocessador és incloure un altre fitxer:#include <stdio.h>
int main(void) { printf("Hello, World!\n"); return 0; }Compilació condicional:#if VERBOSE >= 2 printf("trace message"); #endifDefinició i expansió de macro:#define HE HI #define LLO _THERE #define HELLO "HI THERE" #define CAT(a,b) a##b #define XCAT(a,b) CAT(a,b) #define CALL(fn) fn(HE,LLO) CAT(HE, LLO) // "HI THERE", because concatenation occurs before normal expansion XCAT(HE, LLO) // HI_THERE, because the tokens originating from parameters ("HE" and "LLO") are expanded first CALL(CAT) // "HI THERE", because parameters are expanded first
Referències
Categoria:Informàtica