En un programa escrito en C, es posible incluir diversas instrucciones para el compilador dentro del código fuente del programa. Estas instrucciones dadas al compilador son llamadas directivas del preprocesador y, aunque realmente no son parte del lenguaje C, expanden el ámbito del entorno de programación de C.
El preprocesador, definido por el standard ANSI de C, contiene las siguientes directivas:
DIRECTIVA #define
La directiva define se usa para definir un identificador y una cadena que el compilador sustituirá por el identificador cada vez que se encuentre en el archivo fuente. Por ejemplo:
#define TRUE 1#define FALSE 0
En este caso el programa siempre va a sustituir la palabra TRUE por el valor 1 y la palaba FALSE por el valor 0. Es importante tener en cuenta que el identificador o en el ejemplo anterior las palabras TRUE y FALSE se les llama “nombre de marco”, ya que así esta establecido en el estándar ANSI .
Aunque realmente, el uso mas común para las directivas #define es para valores constantes que jamás van a cambiar, como el tamaño de un array o cosas por el estilo.
Una característica que posee la directiva #define es que el “nombre de macro” puede contener argumentos. Cada vez que el compilador encuentra el “nombre de macro”, los argumentos reales encontrados en el programa reemplazan los argumentos asociados con el nombre de macro. Veamos un ejemplo:
#define MAX(a, b) (a > b) ? a :bint main(){
int a = 10, b = 20;
printf("El valor mas grande es: %d \n", MAX(a, b));
}
El compilador sustituye el “nombre de macro” y sus argumentos en tiempo de compilación, y ello equivale a haber escrito el código:
intmain(){
int a = 10, b = 20;
printf("El numero mas grande es: %d \n", (a > b) ? a : b);
}
DIRECTIVA #undef
La directiva #undef permite quitar una definición de “nombre de macro” que se realizo con anterioridad. Veamos un ejemplo:
#define TAM 10#undef TAM
Aquí lo que paso es que simplemente la definición TAM ya no existe, por lo tanto, el compilador no la va a reconocer.
DIRECTIVA #error
La directiva #error fuerza a parar la compilación del programa, a la vez que muestra un mensaje de error. El mensaje de error no aparecerá entre comillas dobles. Veamos un ejemplo:
#error Detenida compilacion
Su principal función es la de detener el programa en ciertas circunstancias relacionadas con la directiva #if.
DIRECTIVA #include
La directiva #include incluye otro archivo fuente en el archivo que tiene la directiva #include, y a compilarlo. El nombre del archivo fuente a incluir se colocara entre comillas dobles o entre paréntesis de ángulo. Por ejemplo:
#include#include"stdio.h"
Los archivos incluidos mediante #include a su vez pueden contener otros archivos incluidos con #include. Los archivos que son agregados entre paréntesis de ángulo son aquellos que están en el directorio de la linea de ordenes del compilador y los agregados entre comillas con los que están en la misma carpeta en donde se encuentra el archivo que se esta ejecutando.
DIRECTIVAS #if, #ifdef, #ifndef, #else, #elif, #endif
Las directivas #if, #ifdef, #ifndef, #else, #elif y #endif son directivas condicionales de compilación. Estas directivas permiten decirle al compilador que partes del programa debe compilar bajo distintas condiciones.
La idea general de la directiva #if es que si es verdad la expresión que se encuentra después del #if, se compilara el código que figura entre el #if y el #endif se compilara. La directiva #else funciona de igual forma que el else del lenguaje C. La directiva #elif funciona como el escalonado de if del lenguaje C. La definición formal es:
#if expresión1
secuencia de sentencias
#elif expresión2
secuencia de sentencias
......
#else
secuencia de sentencias
#endif
DIRECTIVA #line
La directiva #line permite cambiar la cuenta de lineas del compilador y el nombre del archivo. Su sintaxis es:
#line número ["nombre de archivo"]
Veamos un ejemplo:
#line 100 /* Inicializa el contador de lineas a 100 *//* 10 lineas */#error Detenida compilación
Indicara el mensaje de error en la linea 110 del programa, y no en la que suceda realmente.
DIRECTIVA #pragma
La directiva #pragma es una directiva que permite dar instrucciones al compilador sobre como debe realizar la compilación del código fuente. Su sintaxis es:
#pragma nombre