Directivas Preprocesador

download Directivas Preprocesador

of 14

description

C++

Transcript of Directivas Preprocesador

  • A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 1

    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.

  • A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 2

    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

    : 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

  • A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 3

    DIRECTIVAS PREPROCESADOR Directiva #define

    Permite establecer una macro en el cdigo fuente del programa.

    La sintaxis es la siguiente

    #define NombreIdentificador

    #define NOMBRE

    #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

  • A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 4

    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)

    ..

    }

  • A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 5

    DIRECTIVAS PREPROCESADOR

    #include

    #define FARENHEIT(c) 9./5*c+32

    #define KELVIN(c) 273.15+c

    using namespace std;

    // programa principal

    int main()

    { int c;

    coutc;

    cout

  • A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 6

    DIRECTIVAS PREPROCESADOR

    Directiva de Compilacin Condicional

    #if . #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 . #elife . #endif

  • A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 7

    DIRECTIVAS PREPROCESADOR Directiva de Compilacion Condicional

    #ifdef . #else . #endif

    Si NOMBRE esta definida, produce verdadero en caso contrario produce falso.

    #ifndef . #else . #endif

    Prueba si NOMBRE no esta definido, si es verdadero procesa las sentencias incluidas.

  • A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 8

    DIRECTIVAS PREPROCESADOR

    #include //Programa con extension cpp

    #include "tools.h // Archivo de Cabecera int main()

    { float r,h;

    if(Datos(r,h))

    { cout

  • A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 9

    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)

    {

    coutr;

    couth;

    return ((r>0)&&(h>0)) ? true:false;

    }

  • A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 10

    DIRECTIVAS PREPROCESADOR

    // Dado 3 numeros se pide determinar el mayor

    #include

    #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;

    coutr>>s>>t;

    cout

  • A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 11

    DIRECTIVAS PREPROCESADOR #include

    #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") ;

    }

  • A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 12

    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{ coutn; }while(n

  • A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 13

    DIRECTIVAS PREPROCESADOR /* Programa que muestra los digitos de un numero entero, calcula la suma y lo muestra

    utilizando macros */

    #include

    #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;

    }

  • A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 14

    DIRECTIVAS PREPROCESADOR

    #ifndef H_DIGITOS

    #define H_DIGITOS

    #define LEER(a) cin>>a

    #define ESCRIBIR(s) cout