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