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.
Las directivas o diretrices de preprocesado son instrucciones especiales que condicionan una parte preliminar en el proceso de compilación completo
#»;»\» antes del cambio de líneaLas directivas incluidas en el ANSI C son:
#include #define #error #if #elif #else #ifdef #ifndef #endif #undef #line #pragma
Hace que el compilador incluya en el fichero fuente el archivo que se indica, llamado fichero cabecera (header file)
#include <nombrefichero> #include "nombrefichero"
nombrefichero representa el nombre del archivo, con extensión .h<> el compilador busca el archivo en el directorio del sistema“”, el compilador lo busca en el directorio actual o directorio de trabajoPermite definir constantes simbólicas y macros
#define NOMBREMACRO Contenido a sustituir
Elimina la definición de una constante simbólica o macro previamente definida
#undef NOMBREMACRO
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
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”
Sirve para que cada compilador pueda producir compilaciones particularizadas, de acuerdo con la sintaxis que defina el propio compilador
#pragma opciondecompilacion
Son directivas que permiten la compilación condicional de diferentes bloques de código
Permite definir constantes simbólicas y macros
#define IDENTIFICADOR cadena o constante
IDENTIFICADOR es la etiqueta y se denomina nombre de macro. Normalmente se escribe con mayúsculascadena es un conjunto de caracteres o símbolos que sustituirán a IDENTIFICADOR siempre que este aparezca en el programa #define NOMBREMACRO(parámetros) expresión
NOMBREMACRO es el identificador o nombre (en mayúsculas)parámetros representa una lista de parámetros reemplazables, separados por comas, que forman parte de la macroexpresión es cualquier expresión válida en C que opere con los parámetros incluidos en la macro#define MAYOR(a,b) ((a)>(b)) ? (a) : (b) ... max = MAYOR(dato1, dato2); /* max es igual al mayor de dato1 o dato2 */
getc() y getchar(), por ejemplo)_LINE_ Representa el número de línea que se está compilando en cada momento_FILE_ Contiene una cadena con el nombre del fichero fuente que se está compilando_DATE_ Representa la fecha de traducción del código fuente a código objeto en formato “mes día año”_TIME_ Contiene la hora de traducción del código en el formato “hora:minuto:segundo”_STDC_ Contiene la constante decimal 1 si la implementación se ajusta al estándar ANSILas 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
expresiónconstante se evalúan en tiempo de compilaciónsecuencia de sentencias X; se representan múltiples líneas de código en lenguaje C#elif es equivalente a #else #if#else y #elif van asociadas a la #if más próxima hacia arriba y son opcionales#ifdef NOMBREMACRO1 secuencia de sentencias 1; #endif #ifndef NOMBREMACRO2 secuencia de sentencias2; #endif
secuencia de sentencias 1; se procesa (compila) si NOMBREMACRO1 está definida previamentesecuencia de sentencias 2; se procesa si NOMBREMACRO2 NO está definida previamente#else como alternativa a las directivas #ifdef y #ifndef, pero no se permite #elif