Directivas de compilación condicional Proyectos en C++ con clases

Anuncio
Tema
Directivas de compilación
condicional
Proyectos en C++ con clases
1
Taller III 2007 Gentile Fabián
Directivas de compilación
condicionales
• Directivas #ifdef e #ifndef:
Estas directivas permiten comprobar si un identificador está o no
actualmente definido, es decir, si un #define ha sido previamente
procesado para el identificador y si sigue definido.
Sintaxis:
#ifdef identifier
#ifndef identifier
La línea:
#ifdef identificador tiene exactamente el mismo efecto que #if 1 si
el identificador está actualmente definido, y el mismo efecto que #if
0 si el identificador no está definido.
#ifndef comprueba la no definición de un identificador, así la línea
#ifndef identificador tiene el mismo efecto que #if 0 si el
identificador está definido, y el mismo efecto que #if 1 si el
identificador no está definido.
Estas directivas se utilizan para encerrar código que se compilara
condicionalmente.
2
Taller III 2007 Gentile Fabián
Directivas de compilación
condicionales
#ifndef NULL
#define NULL 0L
#endif
• De este modo, la línea del #define se ignorará si el símbolo NULL
ya está definido
• Todas las directivas condicionales deben completarse dentro del
mismo fichero. Sólo se compilarán las líneas que estén dentro de
las secciones que cumplan la condición de la expresión constante
correspondiente.
3
Taller III 2007 Gentile Fabián
Proyectos en C++ con clases
• Para crear un programa que utiliza varias clases es
necesario crear un proyecto.
• El mismo incluirá solamente aquellos archivos cuya
extensión es .CPP o .OBJ
• Cada clase se incluirá en un archivo cuyo nombre
será: NombreClase.H
• Cada implementación de la clase se incluirá en un
archivo NombreClase.CPP
• Cada archivo NombreClase.CPP debe incluir
dentro NombreClase.h
4
Taller III 2007 Gentile Fabián
Proyectos en C++ con clases
• Al incluir un archivo.h (cuyo código posee
la declaración de una clase), en 2 o más
archivos, el compilador generará un error
indicando que esa declaración esta
duplicada.
5
Taller III 2007 Gentile Fabián
Proyectos en C++ con clases
• Para solucionar este problema es
necesario utilizar directivas de compilación
condicional tales como #ifndef, #endif.
• Estas directivas encerraran todo el código
que posee un archivo.h para que el
compilador solo compile ese código una
vez.
• Este modelo ya es utilizado por los
archivos de cabecera iostream.h, conio.h
string.h, etc.
6
Taller III 2007 Gentile Fabián
•
Ejemplo de un proyecto con Clases
utilizando directivas de compilación
condicionales
Archivo con directivas
de compilación
condicional
7
Taller III 2007 Gentile Fabián
Proyectos en C++ con clases
• El proyecto consta de 3 archivos.h, 4 archivos.cpp y un
archivo.prj.
• Se observa que el archivo Base.h posee directivas de
compilación condicionales que encierran el código entre
#ifndef .. #endif.
• Dentro del mismo se incluye la directiva
#define BASE
• Por lo tanto la primera vez que el compilador compila
este archivo no encuentra este define BASE y por lo
tanto lo crea.
• La segunda vez que intenta compilar Base.h se
encuentra con que BASE ya existe entonces no compila
el código encerrado entre el #ifndef y #endif por lo
tanto no aparece el error que indica codigo
duplicado!
Este proyecto compila y linkea correctamente.
8
Taller III 2007 Gentile Fabián
Proyectos en C++ con clases
#ifndef BASE
#define BASE
class Base{
public:
Base( );
…
};
#endif
Si no se definió el
define BASE
Definir BASE
La declaración de la
clase queda encerrada
entre #ifndef y #endif
Fin del ifndef
9
Taller III 2007 Gentile Fabián
Proyectos en C++ con clases
• El archivo Base.cpp posee la implementación de
la clase por lo tanto es obligatorio incluir el
archivo Base.h
// archivo Base.cpp
#include “Base.h”
Base::Base{
…
}
…
10
Taller III 2007 Gentile Fabián
Proyectos en C++ con clases
Clase Derivada1
// archivo Deriv1.h
Se incluye el archivo
#include “Base.h”
Base.h por la herencia
class Deriv1:public Base{
public:
Deriv1( );
…
};
11
Taller III 2007 Gentile Fabián
Proyectos en C++ con clases
• El archivo Deriv1.cpp posee la implementación
de la clase por lo tanto es obligatorio incluir el
archivo Deriv1.h
// archivo Deriv1.cpp
#include “Deriv1.h”
Deriv1::Deriv1(){
…
}
…
12
Taller III 2007 Gentile Fabián
Proyectos en C++ con clases
• El archivo Main.cpp posee la utilización de las
clase Deriv1 y Deriv2 por lo tanto es obligatorio
incluir los archivos Deriv1.h y Deriv2.h
#include “Deriv1.h”
#include “Deriv2.h”
void main(){
Deriv1 d;
Deriv2 d;
…
}
13
Taller III 2007 Gentile Fabián
Proyectos en C++ con clases
• Por ultimo el archivo del proyecto Includ.prj (en turbo c++ o borland
c++) Solo incluirá archivos .cpp , .c o .obj únicamente.
• Nunca se deben incluir archivos .h ya que daría un error de linker
indicando duplicación de código, aún utilizando directivas de
compilación condicionales.
14
Taller III 2007 Gentile Fabián
Descargar