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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

✐<br />

✐<br />

✐<br />

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

✐<br />

Capítulo 2. Construir y usar objetos<br />

becera. Un fichero de cabecera es un fichero que conti<strong>en</strong>e las declaraciones externas<br />

de una librería; conv<strong>en</strong>cionalm<strong>en</strong>te ti<strong>en</strong>e un nombre de fichero con ext<strong>en</strong>sión .h,<br />

como headerfile.h (no es difícil <strong>en</strong>contrar código más antiguo con ext<strong>en</strong>siones<br />

difer<strong>en</strong>tes, como .hxx o .hpp, pero es cada vez más raro).<br />

El programador que crea la librería proporciona el fichero de cabecera. Para declarar<br />

las funciones y variables externas de la librería, el usuario simplem<strong>en</strong>te incluye<br />

el fichero de cabecera. Para ello se utiliza la directiva de preprocesado #include.<br />

Eso le dice al preprocesador que abra el fichero de cabecera indicado e incluya el cont<strong>en</strong>ido<br />

<strong>en</strong> el lugar donde se <strong>en</strong>cu<strong>en</strong>tra la s<strong>en</strong>t<strong>en</strong>cia #include. Un #include puede<br />

indicar un fichero de dos maneras: mediante paréntesis angulares ( < > ) o comillas<br />

dobles.<br />

Los ficheros <strong>en</strong>tre paréntesis angulares, como:<br />

#include <br />

hac<strong>en</strong> que el preprocesador busque el fichero como si fuera particular a un proyecto,<br />

aunque normalm<strong>en</strong>te hay un camino de búsqueda que se especifica <strong>en</strong> el<br />

<strong>en</strong>torno o <strong>en</strong> la línea de comandos del compilador. El mecanismo para cambiar el<br />

camino de búsqueda (o ruta) varía <strong>en</strong>tre maquinas, sistemas operativos, e implem<strong>en</strong>taciones<br />

de <strong>C++</strong> y puede que requiera un poco de investigación por parte del<br />

programador.<br />

Los ficheros <strong>en</strong>tre comillas dobles, como:<br />

#include "header"<br />

le dic<strong>en</strong> al preprocesador que busque el fichero <strong>en</strong> (de acuerdo a la especificación)<br />

«un medio de definición de implem<strong>en</strong>tación», que normalm<strong>en</strong>te significa buscar el<br />

fichero de forma relativa al directorio actual. Si no lo <strong>en</strong>cu<strong>en</strong>tra, <strong>en</strong>tonces la directiva<br />

se preprocesada como si tuviera paréntesis angulares <strong>en</strong> lugar de comillas.<br />

Para incluir el fichero de cabecera iostream, hay que escribir:<br />

#include <br />

El preprocesador <strong>en</strong>contrará el fichero de cabecera iostream (a m<strong>en</strong>udo <strong>en</strong> un<br />

subdirectorio llamado «include») y lo incluirá.<br />

Formato de inclusión del estándar <strong>C++</strong><br />

A medida que <strong>C++</strong> evolucionaba, los difer<strong>en</strong>tes fabricantes de compiladores elegían<br />

difer<strong>en</strong>tes ext<strong>en</strong>siones para los nombres de ficheros. Además, cada sistema operativo<br />

ti<strong>en</strong>e sus propias restricciones para los nombres de ficheros, <strong>en</strong> particular la<br />

longitud. Estas características crearon problemas de portabilidad del código fu<strong>en</strong>te.<br />

Para limar estos problemas, el estándar usa un formato que permite los nombres de<br />

ficheros más largos que los famosos ocho caracteres y permite eliminar la ext<strong>en</strong>sión.<br />

Por ejemplo <strong>en</strong> vez de escribir iostream.h <strong>en</strong> el estilo antiguo, que se asemejaría a<br />

algo así:<br />

#include <br />

ahora se puede escribir:<br />

44<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!