Directivas de Preprocesador - AlgoritmosyEstructurasDeDatos/Laboratorio_JSL GitHub Wiki
El lenguaje C contiene unas directivas que se ejecutan al inicio del proceso de compilación. Estas directivas son sentencias específicas del preprocesador, el que es llamado al inicio del proceso por gcc.
Estas directivas empiezan todas con # y permiten ejecutar instrucciones especiales. Entre ellas, están:
Asocia un identificador con secuencias de caracteres. Cuando estas secuencias representan sentencias o expresiones de C, se denominan macros. Su sintaxis es:
#define <identificador>[(parámetro)] <texto>El campo <texto> puede estar vacío. Por ejemplo, podemos definir una constante:
#define PI 3.141592
#define LENGTH 10
#define BUFFER_SIZE 100Al momento de compilar, el preprocesador reemplaza el identificador respectivo por su significado. En otras palabras, antes de compilar, estas definiciones son reemplazadas por su significado, de modo que no se asocian estos valores con variables. Por ejemplo, si tenemos el código:
#define LENGTH 10
int array[LENGTH];
for(i=0; i < LENGTH; i++){
array[i] = LENGTH*i;
}Cuando compilemos, el preprocesador transformará este código en:
int array[10];
for(i=0; i < 10; i++){
array[i] = 10*i;
}Una macro se define como una "mini función" mediante #define, solo que, en ser una función como tal, tan solo es una expresión donde se reemplaza su parámetro en su definición. Por ejemplo:
#define pow2(x) x*x
// Aquí usamos macros definidas previamente
#define area(radio) pow2(radio)*PIEntonces, si en nuestro código tenemos una instrucción como:
float r = 1.4;
float a = area(r);El preprocesador se encargará de reemplazarlo, quedando así:
float r = 1.4;
float a = r*r*3.141592La traducción de las directivas de preprocesador es lo primero que se ejecuta en la cadena de compilación de un programa en C. Es posible ver su resultado utilizando solo la "compilación" de preprocesador, a través de un flag específico de gcc:
# Esto traducirá las directivas y mostrará el
# resultado por pantalla
$ gcc -E fuente.c
# Esta versión lo dejará en otro archivo C
$ gcc -E -o salida.c fuente.c