El preprocesador de C

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

Podemos usar parámetros en la sustitución de macros.

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:

 

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;

}