C++ cap9

Tema 9 - El preprocesador.
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:
#if #ifdef #ifndef #else
#elif #endif #include #define
#undef #line #error #pragma
Tabla 9.1: Directivas del preprocesador en C.
9.1 - 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. El standard ANSI llama al  identificador "nombre de macro" y al  proceso de
sustitución "sustitución de macro". Por ejemplo:
#define TRUE 1
#define FALSE 0
El  compilador,  cada  vez que vea el  identificador  TRUE,  lo sustituirá  por  el
valor 1, e igual con FALSE. El uso mas común de la directiva #define es la definición
de valores constantes en el programa, tamaños de arrays, etc.
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 MIN(a,b) (a<b) ? a : b
Si tenemos ahora en el programa:
printf("El valor mínimo es: %d\n",MIN(10,20));
El compilador sustituye el "nombre de macro" y sus argumentos en tiempo de
compilación, y ello equivale a haber escrito el código:
printf("El valor mínimo es: %d\n",(10<20) ? 10 : 20);El lenguaje de programación C
9.2 - 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
A partir  de  #undef  TAM,  el  "nombre  de  macro"  TAM deja  de  existir,  ello
permite localizar los "nombre de macro" donde sea necesario.
9.3 - 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 compilación
Su principal uso viene asociado a detener la compilación en ciertas condiciones
en asociación con las directivas #if, etc., explicadas con posterioridad.
9.4 - Directiva #include.
La directiva  #include fuerza al  compilador a incluir 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 <stdio.h>
#include "stdio.h"
Los  archivos  incluidos  mediante  #include pueden  a  su  vez  poseer  otras
directivas #include. La diferencia existente entre encerrar el archivo entre paréntesis de
ángulo o entre comillas dobles, es que, en el primer caso,  se busca el archivo en los
directorios  de  la  linea  de  ordenes  de  compilación,  y,  después  en  los  directorios
standard de C, pero nunca en el directorio de trabajo; y en el segundo caso el primer
sitio  donde  se  busca  el  archivo  a  incluir  es  en  el  directorio  actual  de  trabajo,
pasándose, caso de no haber sido encontrado, a buscar en los mismos sitios que el caso
anterior.
9.5 - Directivas #if, #ifdef, #ifndef, #else, #elif y #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.El lenguaje de programación C
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
Veamos algunos ejemplos:
#define MEM 200
#if MEM>100
   printf("MEM es mayor de 100");
#endif
#define VALOR 0
#if VALOR==0
   c=a*b/(VALOR+1);
#else
   c=a*b/VALOR;
#endif
Compilara el código para el caso de VALOR==0.
#define VALOR 15
#if VALOR<0
   b=b/(-VALOR);
#elif VALOR==0
   b=b/(VALOR+1);
#else
   b=b/VALOR;
#endif
Compilara el código para el último caso.
La directivas  #ifdef y  #ifndef se usan también para compilación condicional,
solo que no evalúan expresión alguna, solo comprueba si esta definido (#ifdef) o si no
esta definido (#ifndef) algún nombre de macro. Su sintaxis general es:
#ifdef nombre de macro
   secuencia de sentencias
#else
   secuencia de sentencias
#endifEl lenguaje de programación C
E igual para #ifndef. Veamos algunos ejemplos:
#define VAL 10
#ifdef VAL
   printf("VAL definido");
#else
   printf("VAL no definido");
#endif
#ifndef NOVAL
   printf("NOVAL no definido");
#endif
Compilara  el  código para  el  caso  de  VAL definido y,  además,  compilara  el
código de NOVAL, al no estar definida dicha macro. Como se observa no se comprueba
el valor de VAL, o el de NOVAL, solo se comprueba si están definidos o no.
9.6 - 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.
9.7 - 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

No hay comentarios.:

Publicar un comentario

!!Clikeaka al espacio cideral!!

THEMRFRIKI S.A. Con tecnología de Blogger.

About