You are on page 1of 14

DIRECTIVAS PREPROCESADOR

El preprocesador del C++ permite sustituir Macros, realizar


compilaciones condicionales e incluir archivos, todo ello antes
que empiece la compilacin del programa.
C++ reconoce los siguientes comandos.
#define, #include, #if, #ifdef, #ifndef, #endif, #else, #elif.
Directiva #include
Permite incluir un archivo (sustituir el contenido del archivo) en el
programa.
Este comando se utiliza para incluir archivos con los prototipos
de las funciones de librera o con mdulos de programacin y
prototipos de funciones de usuario.

ALGORITMOS Y ESTRUCTURA DE DATOS

DIRECTIVAS PREPROCESADOR
El archivo suelen tener extensin h, o puede incluirse
cualquier tipo de archivo texto.
El archivo puedes estar encerrado con doble comilla ( ) o <>.
#include Nombre Archivo
#include <Nombre Archivo>

<>: La bsqueda del archivo se centra en el directorio


estndar de los archivos incluidos.
: Se busca el archivo en el directorio actual, y
posteriormente en el directorios estndar de libreras.
Ejemplo
#include tools.h
#include <math.h>

ALGORITMOS Y ESTRUCTURA DE DATOS

DIRECTIVAS PREPROCESADOR
Directiva #define
Permite establecer una macro en el cdigo fuente del
programa.
La sintaxis es la siguiente
#define NombreIdentificador
#define NOMBRE <Dato>
#define NOMBRE(parametros) Texto a Introducir con
parmetros.
Antes de comenzar la compilacin, el preprocesador
analiza el programa y cada vez que encuentra el
identificador NOMBRE lo sustituye por el texto que se
especifica.
Ejemplo
#define E 2.718281828459
ALGORITMOS Y ESTRUCTURA DE DATOS

DIRECTIVAS PREPROCESADOR
#define E 2.718281828459
int main()
{ double a;
a=(1.0 + 1.0/E)*(1.0 -2.0/E)
..
}

Al sustituir la macro en el programa queda as:


int main()
{ double a;
a=(1.0 + 1.0/2.718281828459)*(1.0 -2.0/2.718281828459)
..
}

ALGORITMOS Y ESTRUCTURA DE DATOS

DIRECTIVAS PREPROCESADOR
#include <iostream>
#define FARENHEIT(c) 9./5*c+32
#define KELVIN(c) 273.15+c
using namespace std;
// programa principal
int main()
{ int c;

cout<<"Ingrese la temperatura en grados centgrados:";


cin>>c;
cout<<c<<"grados centgrados equivale a "<<FARENHEIT(c)
cout<<" grados farenheit"<<endl;
cout<<c<<"grados centgrados equivale a "<<KELVIN(c)
cout<<" grados kelvin"<<endl;
system("PAUSE");
}
ALGORITMOS Y ESTRUCTURA DE DATOS

DIRECTIVAS PREPROCESADOR
Directiva de Compilacin Condicional
#if<Expresion Constante>
.
#else
.
#endif

Se compila si la condicin es verdadero, caso contrario el


preprocesador los elimina del archivo fuente y el
compilador nunca los visualiza.
#if<Expresion Constante1>
.
#elife<Expresion Constante2>
.
#endif

ALGORITMOS Y ESTRUCTURA DE DATOS

DIRECTIVAS PREPROCESADOR
Directiva de Compilacion Condicional
#ifdef <NOMBRE>
.
#else
.
#endif
Si NOMBRE esta definida, produce verdadero en caso
contrario produce falso.
#ifndef<Expresion Constante>
.
#else
.
#endif
Prueba si NOMBRE no esta definido, si es verdadero
procesa las sentencias incluidas.
ALGORITMOS Y ESTRUCTURA DE DATOS

DIRECTIVAS PREPROCESADOR
#include <iostream> //Programa con extension cpp
#include "tools.h // Archivo de Cabecera
int main()
{ float r,h;
if(Datos(r,h))
{ cout<<"Para r="<<r<<" El Area del Circulo es:"<<AreaCir(r)<<endl;
cout<<"Para r="<<r<<", h="<<h;
cout<<" El Area total del Cilindro es:"<<AreaCil(r,h)<<endl;
cout<<"Area Rectangulo es:"<<AreaRec(r,h)<<endl;
}
else
cout<<"Datos invalidos...."<<endl;
}

ALGORITMOS Y ESTRUCTURA DE DATOS

DIRECTIVAS PREPROCESADOR
//Archivo de cabecera con extensin h (tools.h)
#define PI 3.141596
#define AreaCir(r) PI*r*r
#define AreaCil(r,h) 2*(AreaCir(r)+PI*r*h)
#define AreaRec(r,h) r*h
using namespace std;
bool Datos( float &r,float &h)
{
cout<<"Cual es la radio:";cin>>r;
cout<<"Cual es la altura:";cin>>h;
return ((r>0)&&(h>0)) ? true:false;
}

ALGORITMOS Y ESTRUCTURA DE DATOS

DIRECTIVAS PREPROCESADOR
// Dado 3 numeros se pide determinar el mayor
#include <iostream>
#define MAYOR(n,m) ((n>m) ? n:m)
#define MAYORTRES(n,m,p) ((MAYOR(n,m)>p)? MAYOR(n,m):p)
using namespace std;
int main()
{ int r,s,t;
cout<<" ingrese tres numeros :";
cin>>r>>s>>t;
cout<<"el mayor de tres numeros es :"<<MAYORTRES(r,s,t)<<endl;
}

ALGORITMOS Y ESTRUCTURA DE DATOS

10

DIRECTIVAS PREPROCESADOR
#include <iostream>
#include "embrujo.h"
//programa de aplicacin de macros sustitucin
using namespace std;
int main()
{ int i, n, sd;
VALIDAPOSITIVO(n,"Ingresa entero positivo");
ASIGNA( sd , 0 ); ASIGNA( i , 1 );
MIENTRAS(ESMENORIGUAL(i,n/2))
{ if(ESDIVISOR(n,i))
ASIGNA(sd,sd + i );
ASIGNA(i,i + 1 );
}
if(ESIGUAL(sd,n))
ESCRIBIR("Es perfecto");
else
ESCRIBIR("No es perfecto");
CAMBIARLINEA; system("PAUSE") ;
}
ALGORITMOS Y ESTRUCTURA DE DATOS

11

DIRECTIVAS PREPROCESADOR
// Debe almacenar en el archivo embrujo.h
#ifndef EMBRUJO_H
#define EMBRUJO_H
#define ASIGNA(a, b) a = b
#define VALIDAPOSITIVO(n, str) do{ cout<<str; cin>>n; }while(n<0);
#define ESMENORIGUAL(a, b) (a<=b)?(a):(b)
#define ESDIVISOR(a, b) ((a%b) == 0)?true:false
#define ESIGUAL(a, b) (a == b)?true:false
#define MIENTRAS(a) while(a==true)
#define ESCRIBIR( str ) cout<<str
#define CAMBIARLINEA cout<<endl;
#endif

ALGORITMOS Y ESTRUCTURA DE DATOS

12

DIRECTIVAS PREPROCESADOR
/* Programa que muestra los digitos de un numero entero, calcula la suma y lo muestra
utilizando macros
*/
#include <iostream>
#include "digitos.h"
using namespace std;
int main()
{ int a,d,s=0;
ESCRIBIR("Ingrese un numero:"); LEER(a);
ESCRIBIR("Los Digitos son:");
MIENTRAS(a)
INICIO
DIGITO(a,d);
OUT(d);
ACUMULAR(s,d);
CAMBIAR(a);
FIN
CAMBIARLINEA;
ESCRIBIR("La Suma es:");
OUT(s);CAMBIARLINEA;
PAUSA;
}
ALGORITMOS Y ESTRUCTURA DE DATOS

13

DIRECTIVAS PREPROCESADOR
#ifndef H_DIGITOS
#define H_DIGITOS
#define LEER(a) cin>>a
#define ESCRIBIR(s) cout<<s
#define MIENTRAS(a) while(a!=0)
#define DIGITO(a,d) d=a%10
#define ACUMULAR(s,d) s+=d
#define CAMBIAR(a) a=a/10
#define OUT(x) cout<<x<<" "
#define CAMBIARLINEA cout<<endl
#define INICIO {
#define FIN }
#define PAUSA system("pause")
#endif

ALGORITMOS Y ESTRUCTURA DE DATOS

14

You might also like