Lenguaje C: Preprocesador


El preprocesador del lenguaje C es un procesador de texto que manipula el fichero fuente, actúa en una fase previa a la compilación.

Directivas de preprocesado

Las directivas o diretrices de preprocesado son instrucciones especiales que condicionan una parte preliminar en el proceso de compilación completo

Las directivas incluidas en el ANSI C son:

    #include    #define     
    #error      #if
    #elif       #else    
    #ifdef      #ifndef
    #endif      #undef
    #line       #pragma
#include

Hace que el compilador incluya en el fichero fuente el archivo que se indica, llamado fichero cabecera (header file)

    #include <nombrefichero>
    #include "nombrefichero"
#define

Permite definir constantes simbólicas y macros

    #define NOMBREMACRO Contenido a sustituir
#undef

Elimina la definición de una constante simbólica o macro previamente definida

    #undef NOMBREMACRO
#error

Fuerza una parada del compilador en la línea de la directiva presentando el mensaje que sigue a la directiva

    #error Mensaje a mostrar en pantalla
#line

Fuerza un cambio de valor en las constantes simbólicas _LINE_ y _FILE_ que representan el número de línea y el archivo que está siendo objeto de compilación

    #line numerolínea “nuevonombrearchivo”
#pragma

Sirve para que cada compilador pueda producir compilaciones particularizadas, de acuerdo con la sintaxis que defina el propio compilador

    #pragma opciondecompilacion
#if #elif #else #endif #ifdef #ifnde

Son directivas que permiten la compilación condicional de diferentes bloques de código

Constantes simbólicas y macros

Directiva #define

Permite definir constantes simbólicas y macros

   #define IDENTIFICADOR cadena o constante 
   #define NOMBREMACRO(parámetros) expresión 
   #define MAYOR(a,b) ((a)>(b)) ? (a) : (b)
   ...
   max = MAYOR(dato1, dato2);
   /* max es igual al mayor de dato1 o dato2 */

Directivas de compilación condicional

Las directivas de compilación condicional permiten la compilación selectiva de partes del fichero fuente

Tipos:

   #if      #elif    #else    #endif
   #ifdef      #ifndef     #endif
   #if expresiónconstante1
      secuencia de sentencias 1;
   #elif expresiónconstante2
      secuencia de sentencias 2;
   #elif expresiónconstante3
      .....
   #elif expresiónconstanteN
      secuencia de sentencias N;
   #else
      secuencia de sentencias M;
   #endif
      #ifdef NOMBREMACRO1
          secuencia de sentencias 1;
      #endif
      #ifndef NOMBREMACRO2
          secuencia de sentencias2;
      #endif