Se denomina preprocesador a un programa que actúa antes que el compilador. Es una etapa previa a la compilación entre cuyas tareas están la inclusión de ficheros, expansión de macros y proceso de directivas.
Las sentencias del preprocesador pueden aparecer en cualquier punto del programa (aunque la mayoría suelen estar al principio) y se caracterizan porque empiezan por el caracter "#". Las más importantes son:
· #define. Define una macro o una constante. Su sintaxis es #define x y, y lo que hace el preprocesador es sustituir en el resto del programa donde encuentre el texto x por y.
Ejemplo.
#define PI 3.1416 // Cada aparición de PI será sustituida por 3.1416
#define MES_ERR "ERROR en la ejecución del programa\n" // Donde pongamos MES_ERR será sustituido por la cadena de la derecha
Ejemplo.
#define max(A,B) ( (A)>(B) ? (A) : (B) )
y usarla como
x=max(p+q,r+s);
que sería sustituida por
x=((p+q)>(r+s) ? (p+q) : (r+s));
· #undef. Borra una macro de la tabla de definiciones.
· #if, #ifdef, #ifndef, #else y #endif. Se puede preguntar por el valor de una constante o la existencia o no de una macro. En caso de ser cierta la condición se compila el código entre #if y #else, en caso de ser falsa se compila el código entre #else y #endif
Ejemplo.
#ifndef PI
#define PI 3.1416
#endif
· #include. Permite incluir un fichero dentro del programa C. Este fichero puede ser de cabecera (.h) u otro programa C. Los ficheros de cabecera contienen:
Los prototipos de funciones.
Definiciones de constantes y macros
No deben contener código (declaraciones de funciones...)
Ejemplo. De uso de instrucciones del preprocesador
#include <stdio.h>
#include <math.h>
#define TAMMAX 10
#define MES_DESP "finalizada la ejecucion del programa\n"
main ()
{
double a[TAMMAX];
int i;
for (i=0; i<TAMMAX; i++)
{
scanf ("%lf", &(a[i]));
printf ("%lf", sin(a[i]));
}
printf(MES_DESP);
return 0;
}