Está en la página 1de 6

Libreria De Turbo C++ FICHEROS INCLUDE DE TURBO C Los ficheros include definidos por el ANSI C van marcados con

un asterisco. alloc.h Contiene funciones para manejo de memoria. assert.h* Define el macro-debugger assert. bios.h Contiene funciones que utilizan llamadas a ROM BIOS. conio.h Llamadas a rutinas I/O de consola del DOS. ctype.h* Clasificacin y conversin de caracteres. dir.h Estructuras, macros y funciones para trabajar con directorios y nombres de path. dos.h Define varias constantes y declaraciones necesarias para el DOS y llamadas especficas al 8086. errno.h* Define constantes mnemnicas para cdigos de error. fcntl.h Define constantes utilizadas en conexin con la librera de funciones open. float.h* Contiene par metros para rutinas en punto flotante. graphics.h Declara prototipos para funciones grficas. io.h Contiene estructuras y declaraciones para rutinas I/O de bajo nivel. limits.h* Contiene par metros de entorno, informacin en torno a limitaciones en tiempo de compilacin. math.h* Declara prototipos de funciones matemticas. mem.h Declara funciones para manipulacin de memoria. process.h Contiene estructuras y declaraciones para funciones spawn... y exec... setjmp.h*... 5 Librera Estndar 1 Sinopsis C++ no llega al nivel de simplicidad de su antecesor C, pero al igual que aqul, tampoco dispone de utilidades o funciones para entrada o salida implementadas en el propio lenguaje, de modo que estas y otras muchas, como manejo de cadenas de caracteres (strings), manejo de ficheros, funciones matemticas Etc. son implementadas en forma de libreras externas. Una librera es un conjunto de recursos (algoritmos) prefabricados, que pueden ser utilizados por el programador para realizar determinadas operaciones ( 1.4.4a). Las declaraciones de las funciones (prototipos 4.4.1) utilizadas en estas libreras, junto con algunas macros y constantes predefinidas que facilitan su utilizacin, se agrupan en ficheros de nombres conocidos que suelen encontrarse en sitios predefinidos. Por ejemplo, en los sistemas UNIX, en /usr/include. Estos ficheros se suelen llamar "de cabecera", porque es tradicin utilizar las primeras lneas del programa para poner las directivas #include ( 4.9.10g) que los incluir en el fuente durante la fase de preprocesado ( 1.4). 2 Clases de libreras Los compiladores C++ incluyen un amplio repertorio de clases, funciones y macros que permiten realizar una amplia variedad de tareas, incluyendo entradas/salidas de bajo y alto nivel; manipulacin de cadenas alfanumricas y ficheros; control de procesos (incluyendo multiproceso); manejo de memoria; clculos matemticos y un largo etctera. Este repertorio de recursos es denominado colectivamente como "Rutinas de librera"; "Libreras de ejecucin" RTL ("Runtime Librarys") o simplemente "Libreras". Puede decirse que el lenguaje aislado (tal cual) no tiene prcticamente ninguna utilidad sin la concurrencia de estas utilidades. El Estndar C++ las clasifica segn su utilidad: Soporte del lenguaje [7] Diagnstico Utilidades generales Cadenas alfanumricas ("Strings") Localizacin Contenedores Iteradores Algoritmos Clculo numrico Entrada/Salida 2.1 Librera Estndar C++ Para poner un poco de orden, el Estndar C++ define la denominada Librera Estndar [3] que debe acompaar a cada implementacin del compilador que se adhiera al estndar. Es decir: la norma determina cuales son, como se llaman y como se utiliza este conjunto de algoritmos que deben acompaar (como mnimo) a cada implementacin del compilador que quiera llamarse "Estndar". La ltima versin, ISO/IEC 14882 del ao 1998, especifica que se compone de 32 ficheros de cabecera de nombres fijos y conocidos agrupados segn la funcionalidad de los algoritmos. Son los siguientes: Ficheros Funcionalidad/funciones <algorithm> Parte de la STL que describe los algoritmos ( 5.1.3)

<bitset> <complex> <deque>

Parte de la STL relativa a contenedores tipo bitset (

5.1.1e1). Set de valores booleanos. ). 5.1.1c3). 1.6)

Parte de la librera numrica de la STL relativa a los complejos (

Parte de la STL relativa a contenedores tipo deque; un tipo de colas: "Double-ended-queue" (

<exception> Parte de la librera de diagnstico relativa al manejo de excepciones ( <fstream> Flujos hacia/desde ficheros. <functional> Parte de la STL relativa a Objetos-funcin ( 4.9.18f) <iomanip> <ios> <iosfwd> <iostream> <istream> <iterator> <limits> <list> <locale> <map> <memory> <new> <numeric> <ostream> <queue> <set> <sstream> <stack>

Manipuladores. Supreclases para manejo de flujos de E/S. Contiene declaraciones adelantadas de todas las plantillas de flujos y sus typedefs estndar. Por ejemplo ostream. Parte del a STL que contiene los algoritmos estndar de E/S. Algoritmos estndar de flujos de entrada. Parte de la STL relacionada con iteradores ( 5.1.2), un tipo de puntero que permite utilizar los algoritmos de la Librera con las estructuras de datos representadas por los contenedores. Descripcin de propiedades dependientes de la implementacin ( fundamentales. Parte de la STL relativa a contenedores tipo list ( Parte de la STL relativa a la internacionalizacin ( Parte de la STL relativa a contenedores tipo map ( 5.2). 5.1.1e4). 5.1.5) y punteros inteligentes 1.2.1) que afectan a los tipos 1.8)

5.1.1c4); listas doblemente enlazadas (

Utilidades relativas a la gestin de memoria, incluyendo asignadores ( (auto_ptr). Manejo de memoria dinmica ( 1.3.2)

Parte de la librera numrica de la STL relativa a operaciones numricas ( Algoritmos estndar para los flujos de salida. Parte de la STL relativa a contenedores tipo queue ( Parte de la STL relativa a contenedores tipo set ( Flujos hacia/desde cadenas alfanumricas. 5.1.1e2).

). 1.8).

5.1.1d1); colas de objetos (

Parte de la STL relativa a contenedores tipo stack ( 5.1.1c5); pilas de objetos ( 1.8). <stdexcept> Parte de la STL relativa a las clases de las que derivan los objetos lanzados por las excepciones ocasionadas en los algoritmos de la propia STL y otras expresiones. Estas clases son utilizadas para reportar errores detectados durante runtime. Los usuarios tambin pueden utilizar excepciones para reportar errores en sus propios programas ( 1.6.1a). <streambuf> Parte de la STL relativa al Almacenamiento de flujos de E/S ("Stream buffers"). Define los tipos que controlan la capa de transporte ( 5.3.2f). <string> Parte de la STL relativa a contenedores tipo string ( ); una generalizacin de las cadenas alfanumricas para albergar cadenas de objetos. <typeinfo> Mecanismo de identificacin de tipos en tiempo de ejecucin ( 4.9.14). <utility> <valarray> <vector> Parte de la STL que contiene elementos auxiliares como operadores y pares (pairs). Parte de la librera numrica de la STL relativa a manejo de matrices numricas () Parte de la STL relativa a los contenedores tipo vector; una generalizacin de las matrices unidimensionales C/C++ ( 5.1.1c1)

Es digno de mencin que aunque generalmente las libreras no aportan ninguna caracterstica al lenguaje (se supone que son utilidades auxiliares que no forman parte del lenguaje propiamente dicho), una pequea porcin de la Librera Estndar C++ s aporta caractersticas que se consideran pertenecientes a este, de forma que deben estar presentes los ficheros de cabecera correspondientes si se desea usarlas. En concreto se refieren a los siguientes elementos: Operadores new, new[], delete y delete[] ( 4.9.20). Clase type_info que corresponde al mecanismo RTTI de identificacin de tipos en tiempo de ejecucin representado por el operador typeid ( 4.9.14). Rutinas de inicio y terminacin ( 1.5).

Las excepciones estndar lanzadas por los algoritmos anteriores ( 1.6.1a) 2.2 Librera C Adems de otras nuevas, cuyo diseo e importancia cambian drsticamente la filosofa del lenguaje, C++ incluye prcticamente la totalidad de funciones de la primitiva librera estndar C. A esta librera, mantenida por compatibilidad, la denominamos Librera clsica ( 5.5). 3 Componentes Al referirnos a las libreras C++ utilizamos la terminologa siguiente: RTL Conjunto de libreras que acompaan a un compilador ("Runtime Library"), sean o no estndar. Librera Estndar. Conjunto de libreras cuyo contenido est definido por el Estndar C++ (abreviadamente LE) Libera clsica. Parte de la Librera Estndar correspondiente al C clsico. STL ("Standard Templete Library"). Parte de la LE genuina de C++ (que no es heredada de C) y que responde a la forma "++" de hacer las cosas. La calidad de un compilador C++ viene determinada en gran medida por la calidad y cantidad de su RTL; por su grado de adherencia al Estndar [6] y por el grado de soporte que proporciona para la plataforma concreta a que se destina. Nota: en lo que concierne a la programacin para MS Windows (las referencias a la plataforma Wintel surgen de forma constante e inevitable), los compiladores Borland C++ y MS Visual C++ son quizs los ms conocidos y utilizados. El primero incluye una completa librera denominada VCL (Visual Component Library 4.11.8b). La del segundo es conocida como MFC (Microsoft Foundation Classes 1.7.2). Linux dispone de su propio compilador: GNU Cpp, que comenz siendo un compilador C y ha evolucionado a un producto que es en realidad un superconjunto de compiladores. No solo puede compilar cdigo C y C++; tambin otros lenguajes como Ada o Fortran; de forma que es comn referirse a ellos como GCC ("GNU Compiler Collection"). La buena noticia es que existen versiones de este compilador para plataformas Windows, de forma que incluso en este ambiente "Propietario" pueden realizarse desarrollos utilizando herramientas "Open source" (ver recuadro en 1.4.0a1). A grandes rasgos la librera Estndar C++ comprende los siguientes mdulos: La denominada Librera Estndar de Plantillas ( 5.1), abreviadamente STL ("Standard Templete Library"). o Librera numrica. Parte de la STL que contiene algoritmos especialmente concebidos para computacin numrica. Por ejemplo, una clase valarray optimizada para matrices numricas y una clase complex para manejo y representacin estandarizada de nmeros complejos (en realidad una plantilla con especializaciones para los tipos float, double y long double). o Utilidades. Parte de la STL dedicada a elementos auxiliares tales como adaptadores y la clase auto_ptr. Unas utilidades de entrada/salida de flujos, denominadas genricamente iostreams ( 5.3). Una utilidad locale para manejo de localismos [4] ( 5.2). Una clase string para manejo estandarizado de cadenas de caracteres. En realidad es una instanciacin (especializacin) de la plantilla basic_string para cadenas de caracteres. Un esquema para describir de modo uniforme el entorno de ejecucin mediante la utilizacin de una clase estndar denominada numeric_limits y especializacin para cada uno de los tipos de datos fundamentales. Utilidades para manejo de memoria ( 5.1.5). Soporte para utilizacin de juegos de caracteres y signos de diversos idiomas. Utilidades de diagnstico y manejo de errores. Incluyen manejo de excepciones ( 1.6) y la macro assert ( 1.4.5). 4 Funcionalidad Si atendemos a su funcionalidad, las utilidades ofrecidas por la Librera Estndar pueden agruparse en: Clasificacin: Clasifican caracteres ASCII, como letras, caracteres de control (no imprimibles), Maysculas/minsculas etc. Se definen en la cabecera <ctype.h>. Entradas/Salidas de Consola: Estas son las denominadas entrada/salida estndar. Por defecto se refieren al teclado y a la pantalla (no pueden utilizarse directamente en aplicaciones de interfaz grfica). Conversin: Convierten caracteres y cadenas de caracteres desde formato alfabtico a numrico de diversos tipos (float, int, long). Tambin realizan la conversin inversa: de formatos numricos a representaciones alfabticas y de maysculas a minsculas y viceversa. Diagnstico: Son rutinas destinadas a comprobaciones; a descubrir y corregir posibles errores. Directorio: Rutinas para manejo de directorios y sus direcciones (path names). En linea (Inline): Rutinas para versiones inline de funciones. El compilador genera el cdigo correspondiente para las versiones inline cuando se utiliza #pragma intrinsic o si se solicita optimizacin al compilador (optimizacin de tiempo de ejecucin). Entrada/Salida. Son rutinas que proporcionan manejo de flujos y operaciones de Entrada/Salida a bajo nivel (de Sistema Operativo).

Manipulacin. Manejo de cadenas y bloques de memoria: copiar, comparar, convertir y buscar. Matemticas: Para realizar clculos matemticos. De Memoria: Proporcionan asignacin de memoria dinmica. Miscelnea. Se agrupan aqu rutinas varias, como las que posibilitan saltos (goto) no locales y las que manejan diferencias de tipo cultural o de lenguaje. Por ejemplo representacin de nmeros, de moneda, formatos de fecha y hora, clasificacin de tipo alfabtico, etc. Control de proceso. Rutinas que permiten invocar y terminar nuevos procesos desde otra rutina. Fecha y hora. Incluyen rutinas para conversin y manipulacin de variables de medida del tiempo (fecha y hora). Argumentos variables. Rutinas utilizadas cuando se usan listas variables de argumentos, como en los casos de printf(), vscanf(), etc. 5 Utilizacin La utilizacin de la Librera Estndar C++ requiere de dos tipos de condiciones que podramos describir como formales y conceptuales. 5.1 En cuanto a las primeras (condiciones formales) y habida cuenta que las utilidades aparecen en forma de funciones, resulta evidente que su utilizacin exige incluirlas en nuestro programa. Para ello se necesitan tres pasos (en realidad las exigencias son las mismas que con cualquier otra funcin, la diferencia estriba en la forma en que se realizan los pasos b y c): a: Incluir en el cdigo fuente las invocaciones a las funciones que estamos utilizando. Ejemplo: printf("Esto es una llamada a la funcin \"printf\" de librera\n"); b: Incluir en el cdigo fuente los prototipos de dichas funciones. Puesto que los prototipos ya estn incluidos en los ficheros estndar de cabecera, hay que indicar al compilador que los incluya [2]. Esto se realiza poniendo en nuestro fuente (normalmente al principio) una directiva de preprocesado #include ( 4.9.10g) que seala el fichero de cabecera que se debe aadir. Por ejemplo, si el manual indica que la funcin printf est definida en el fichero de cabecera stdio.h ponemos en nuestro cdigo: #include <stdio.h> c: Incluir en el fuente las definiciones de las funciones utilizadas. Como alternativa se puede indicar al compilador que tales definiciones estn en ficheros compilados previamente. En este ltimo caso se dice que las definiciones de las funciones estn en libreras ( 1.4) de las que existen dos tipos:estticas (.LIB, .OBJ y .BPI) y dinmicas (.DLL). Toda la informacin que necesita el compilador est contenida en los ficheros de cabecera, por lo que las operaciones correspondientes son realizadas de forma automtica; con la sola condicin de que los ficheros y libreras correspondientes sean accesibles al enlazador. No olvidar que la entidades de la Librera Estndar C++ (que no estn en ficheros de cabecera .h), se han definido en un espacio de nombres denominado std, por lo que es preciso referirse a l especficamente cuando se quieran utilizar estos recursos ( 4.1.11c2). 5.2 Respecto a las que hemos denominado "condiciones conceptuales", damos por sentado que la utilizacin de algoritmos de la Librera exige conocerlos. Pero debemos advertir que existe una gran diferencia entre las rutinas de la que hemos denominado librera clsica y los recursos de la nueva Librera Estndar de Plantillas STL. 5.2a En general los algoritmos contenidos en la librera clsica realizan tareas muy sencillas bajo la forma de funciones que, con un cierto nmero de argumentos, realizan la tarea encomendada. A veces devolviendo un objeto (que puede ser una estructura). Su utilizacin exige poco ms que repasar esta coleccin de funciones (209 en la ltima versin del Estndar) hasta encontrar la que mejor se ajusta a nuestras necesidades. Para esto lo mejor es recurrir a la clasificacin temtica ofrecida en la documentacin que acompaa a los compiladores antes que a la lista alfabtica de las mismas. A continuacin estudiamos atentamente su prototipo y la explicacin de funcionamiento que acompaa el manual (eventualmente incluso con un ejemplo) y ya estamos listos para utilizarla. En el peor de los casos suelen bastar un par de pruebas hasta que conseguimos ajustar los argumentos de forma que se consiga el resultado esperado. Nota: a ttulo de ejemplo, el fichero BCB5RTL.HLP, que contiene la "C Runtime Library reference" (nombre con que aparece la Librera Clsica en la documentacin de Borland), contiene dos secciones; la primera, denominada "Categorical Routines and Types Listing", contiene la clasificacin temtica; la segunda, denominada "Alphabetical Routines and Types Listing", contiene la relacin alfabtica [5]. Como ltima recomendacin al respecto, sobre todo si pensamos que nuestro programa tendr una larga vida y/o pensamos portarlo a otras plataformas, aconsejara echar un vistazo a la seccin de "compatibilidad" que acompaa a la descripcin de cada funcin en la documentacin de la mayora de compiladores. Suele ocurrir que el compilador ofrezca muchas ms funciones que las estrictamente Estndar C++, y que estas no estn claramente separadas del resto, de forma que es posible que elijamos una funcin que resuelve nuestro problema pero no es portable, en cuyo caso aconsejara evitarlas dentro de lo posible. Nota: como ejemplo escogido al azar, la funcin max(), que aparece en primer lugar en la clasificacin temtica de la documentacin Borland C (Runtime Library reference: "Categorical Routines and Types Listing"), es una funcin

ofrecida por este compilador para el entorno Windows-32 pero no es portable a UNIX ni tampoco pertenece a los estndares C o C++. 5.2b Para todo el que no se haya asomado antes a la programacin genrica, la utilizacin de la nueva Librera de Plantillas (STL) exige la asimilacin de un nuevo paradigma; una nueva forma de pensar que, si se tiene experiencia en programacin tradicional, exige incluso un "cambio de chip", ya que estas herramientas conforman un mundo enteramente nuevo y singular. Con independencia de las explicaciones ms detalladas que incluimos en el siguiente captulo ( 5.1), adelantemos aqu que la STL ofrece un conjunto de recursos flexible, potente y altamente optimizado para resolver una gran variedad de situaciones de programacin. Pero esta versatilidad y potencia tributan un precio: su alto grado de parametrizacin supone algo ms que utilizar herramientas aisladas. Es necesario saber ensamblar entre s los recursos disponibles, que no trabajan aisladamente y que son bsicamente de tres tipos: contenedores, iteradores y algoritmos. El resultado es que el proceso de utilizar la STL es algo ms complicado que la simple bsqueda de una funcin que resuelva nuestras necesidades; que la curva de aprendizaje es ciertamente ms ardua que en el caso de la librera clsica, y que los conceptos involucrados son ms abstractos y requieren un conocimiento ms extenso de sus fundamentos para utilizarlos. Desde luego, la descripcin detallada de todos sus elementos exige un libro completo, y de hecho son muchos los que se han publicado con el objeto exclusivo de describir la STL y/o sus tcnicas de uso. En compensacin, las contrapartidas obtenidas justifican sin duda el esfuerzo. El programador puede concentrarse ms en el problema que en los detalles de su implementacin en el fuente, se incremente la productividad y se gana en claridad conceptual. 6 Funciones y macros Hay que sealar que algunas funciones pueden venir implementadas de dos formas: como macro y como funcin. Por ejemplo, la funcin isalnum, contenida en <ctype.h>. Esto significa que adems de estar implementada como una funcin en la correspondiente librera (que se utiliza con los argumentos sealados en el manual), est definida como una macro de preprocesado en <ctype.h>, de forma que salvo indicacin contraria al compilador, el preprocesador transforma la llamada del programador en otra serie de sentencias equivalentes que utilizan los mismos argumentos. El resultado es que en el cdigo resultante, que luego pasa al compilador y al enlazador, no existe nada parecido a una llamada a una funcin isalnum (tcnicamente el proceso es una sustitucin inline de la funcin de librera, 4.4.6b). Para evitar que esto ocurra y por consiguiente que la llamada a islanum nunca llegue a producirse, basta con indefinir la correspondiente directiva. Esto se hace incluyendo al principio del cdigo, y debajo de la lnea #include <ctype.h>, una lnea de preprocesado adecuada, en este caso: #undef isalnum, con lo que el #define del preprocesador quedar sin efecto, con el resultado de que todas las invocaciones a isalnum de nuestro cdigo sern respetadas por el preprocesador. Ms tarde el enlazador cargar el cdigo de isalnum (que extrae de la librera) con el resto de nuestro programa, y colocar en cada punto de nuestro cdigo donde aparezca una invocacin a isalnum, un salto a la direccin adecuada. En estos casos, el resultado es el mismo en ambas modalidades: como macro (por defecto) o como funcin de librera. La eleccin de una u otra es cuestin de optimizacin. Para tomar una decisin es necesario comprobar y valorar dos aspectos: El tamao del ejecutable que resulta en uno y otro caso. Posiblemente mayor si se utiliza la funcin muchas veces y se adopta la macro. La velocidad de ejecucin. Posiblemente mayor si se utiliza la funcin muchas veces (en bucles muy largos) y se utiliza la macro [1]. Inicio. [1] El cronometraje se puede realizar sencillamente a mano, con un cronmetro, o colocando marcadores en sitios estratgicos del programa que, utilizando el reloj del sistema, muestren los tiempos consumidos. Ver ejemplo ( 9.1). [2] Estrictamente hablando estas operaciones son realizadas por el preprocesador, el analizador sintctico, el compilador o el enlazador segn los casos. Nos referimos a todos estos mdulos como "compilador" en un sentido genrico, pues desde un punto de vista prctico, en algunos casos (como el copilador C++Builder de Borland), solo hay que realizar una llamada al "compilador" y este se encarga de la totalidad del proceso ( 1.4.0). [3] En lo sucesivo la designaremos as, con maysculas iniciales, para simbolizar que es una librera nica y perfectamente especificada. [4] "Locales" son conjuntos de datos que indican preferencias culturales. Por ejemplo: formas de representar la hora, las fechas, el "punto" decimal, etc. La utilidad locale de la Librera Estndar es la forma que tiene C++ de dar soporte a la internacionalizacin de los programas. [5] Aconsejo descargar la documentacin C++ del "Site" de Borland aunque se trabaje con otro compilador. Adems de gratuita, es muy completa, bien estructurada y con abundantes ejemplos. [6] Posiblemente esta afirmacin puede resultarle sorprendente a ms de uno. En informtica y en muchos aspectos de la vida, las leyes y normas suelen ir muy por detrs de mundo y la vida cotidianos. Es frecuente que las estandarizaciones y normativas se limiten a consagrar "oficialmente" hbitos y costumbres largamente consagrados ya por la prctica. Sin embargo, en el caso del C++ los acontecimientos se han sucedido a veces de forma contraria. En el Comit de Estandarizacin participan representantes de la industria (del software) junto con miembros de laboratorios de investigacin y desarrollo. Tericos de los lenguajes; estudiosos de las teoras de computacin, de compiladores, Etc. que han tenido tanto o ms peso que aquellos. El resultado es que en algunos casos el Estndar a introducido y aprobado herramientas

que no estaban suficientemente probadas o generalizadas en la prctica. Construcciones tericas que ni siguiera eran soportadas por la mayora de compiladores disponibles comercialmente. Esto, que incluso ha originado comentarios negativos por parte de algunos miembros del Comit, ha motivado que incluso algn tiempo despus de publicado el Estndar, muchos compiladores no hubiesen implementado an todas sus caractersticas. [7] Este primer grupo constituye un caso especial: En principio una librera es algo que ayuda a realizar determinadas operaciones con ms facilidad que la ofrecida por los mtodos implementados en el lenguaje, o que permite hacer algo que no puede hacerse con las herramientas definidas en l, pero que en rigor no forma parte del lenguaje en s mismo. Sin embargo C++ ha sido dotado de ciertas extensiones que se han incluido en forma de libreras (denominadas "de soporte" 1.5.2). De forma que en cierto sentido dichas libreras s forman parte del lenguaje. http://www.zator.com/Cpp/index.htm