13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 45 — #83<br />

✐<br />

2.2. Herrami<strong>en</strong>tas para compilación modular<br />

#include <br />

El traductor puede implem<strong>en</strong>tar la s<strong>en</strong>t<strong>en</strong>cia del include de tal forma que se<br />

amolde a las necesidades de un compilador y sistema operativo particular, aunque<br />

sea necesario truncar el nombre y añadir una ext<strong>en</strong>sión. Evid<strong>en</strong>tem<strong>en</strong>te, también<br />

puede copiar las cabeceras que ofrece el fabricante de su compilador a otras sin ext<strong>en</strong>siones<br />

si quiere usar este nuevo estilo antes de que su fabricante lo soporte.<br />

Las librerías heredadas de C aún están disponibles con la ext<strong>en</strong>sión tradicional<br />

«.h». Sin embargo, se pued<strong>en</strong> usar con el estilo de inclusión más moderno colocando<br />

una «c» al nombre. Es decir:<br />

#include <br />

#include <br />

Se transformaría <strong>en</strong>:<br />

#include <br />

#include <br />

Y así para todas cabeceras del C Estándar. Eso proporciona al lector una distinción<br />

interesante <strong>en</strong>tre el uso de librerías C versus <strong>C++</strong>.<br />

El efecto del nuevo formato de include no es idéntico al antiguo: usar el «.h» da<br />

como resultado una versión más antigua, sin plantillas, y omiti<strong>en</strong>do el «.h» le ofrece<br />

la nueva versión con plantillas. Normalm<strong>en</strong>te podría t<strong>en</strong>er problemas si int<strong>en</strong>ta<br />

mezclar las dos formas de inclusión <strong>en</strong> un mismo programa.<br />

2.2.2. Enlazado<br />

El <strong>en</strong>lazador (linker) agrupa los módulos objeto (que a m<strong>en</strong>udo ti<strong>en</strong><strong>en</strong> ext<strong>en</strong>siones<br />

como .o ó .obj), g<strong>en</strong>erados por el compilador, <strong>en</strong> un programa ejecutable que<br />

el sistema operativo puede cargar y ejecutar. Es la última fase del proceso de compilación.<br />

Las características del <strong>en</strong>lazador varían de un sistema a otro. En g<strong>en</strong>eral, simplem<strong>en</strong>te<br />

se indican al <strong>en</strong>lazador los nombres de los módulos objeto, las librerías que se<br />

desean <strong>en</strong>lazar y el nombre del ejecutable de salida. Algunos sistemas requier<strong>en</strong> que<br />

sea el programador el que invoque al <strong>en</strong>lazador, aunque <strong>en</strong> la mayoría de los paquetes<br />

de <strong>C++</strong> se llama al <strong>en</strong>lazador a través del compilador. En muchas situaciones, de<br />

manera transpar<strong>en</strong>te.<br />

Algunos <strong>en</strong>lazadores antiguos no buscaban ficheros objeto más de una vez y buscaban<br />

<strong>en</strong> la lista que se les pasaba de izquierda a derecha. Esto significa que el ord<strong>en</strong><br />

de los ficheros objeto y las librerías puede ser importante. Si se <strong>en</strong>cu<strong>en</strong>tra con algún<br />

problema misterioso que no aparece hasta el proceso de <strong>en</strong>lazado, una posible razón<br />

es el ord<strong>en</strong> <strong>en</strong> el que se indican los ficheros al <strong>en</strong>lazador.<br />

2.2.3. Uso de librerías<br />

Ahora que ya conoce la terminología básica, puede <strong>en</strong>t<strong>en</strong>der cómo utilizar una<br />

librería. Para usarla:<br />

45<br />

✐<br />

✐<br />

✐<br />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!