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 161 — #199<br />

✐<br />

4.7. Conveciones para los ficheros de cabecera<br />

#define FLAG<br />

o puede darle un valor (que es la manera habitual <strong>en</strong> C para definir una constante):<br />

#define PI 3.14159<br />

En cualquier caso, ahora el preprocesador puede comprobar si la etiqueta ha sido<br />

definida:<br />

#ifdef FLAG<br />

Esto producirá un resultado verdadero, y el código que sigue al #ifdef se incluirá<br />

<strong>en</strong> el paquete que se <strong>en</strong>vía al compilador. Esta inclusión acaba cuando el preprocesador<br />

<strong>en</strong>cu<strong>en</strong>tra la s<strong>en</strong>t<strong>en</strong>cia:<br />

#<strong>en</strong>dif<br />

o<br />

#<strong>en</strong>dif // FLAG<br />

Cualquier cosa después de #<strong>en</strong>dif <strong>en</strong> la misma línea que no sea un com<strong>en</strong>tario<br />

es ilegal, incluso aunque algunos compiladores lo acept<strong>en</strong>. Los pares #ifdef/#<strong>en</strong>dif<br />

se pued<strong>en</strong> anidar.<br />

El complem<strong>en</strong>tario de #define es #undef (abreviación de «un-define» que hará<br />

que una s<strong>en</strong>t<strong>en</strong>cia #ifdef que use la misma variable produzca un resultado falso.<br />

#undef también causará que el preprocesador deje de usar una macro. El complem<strong>en</strong>tario<br />

de #ifdef es #ifndef, que producirá verdadero si la etiqueta no ha sido<br />

definida (éste es el que usaremos <strong>en</strong> los ficheros de cabecera).<br />

Hay otras características útiles <strong>en</strong> el preprocesador de C. Consulte la docum<strong>en</strong>tación<br />

de su preprocesador para ver todas ellas.<br />

4.7.4. Un estándar para los ficheros de cabecera<br />

En cada fichero de cabecera que conti<strong>en</strong>e una estructura, primero debería comprobar<br />

si ese fichero ya ha sido includo <strong>en</strong> este fichero cpp particular. Hágalo comprobando<br />

una bandera del preprocesador. Si la bandera no está definida, el fichero<br />

no se ha incluido aún, y se debería definir la bandera (de modo que la estructura no<br />

se pueda redeclarar) y declarar la estructura. Si la bandera estaba definida <strong>en</strong>tonces<br />

el tipo ya ha sido declarado de modo que debería ignorar el código que la declara.<br />

Así es como debería ser un fichero de cabecera:<br />

#ifndef HEADER_FLAG<br />

#define HEADER_FLAG<br />

// Escriba la ódeclaracin íaqu...<br />

#<strong>en</strong>dif // HEADER_FLAG<br />

161<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!