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 529 — #567<br />

✐<br />

A.6. Ord<strong>en</strong> de los #includes<br />

El valor del estilo es que el uso de mayúsculas ti<strong>en</strong>e significado - vi<strong>en</strong>do la primera<br />

letra se puede saber si es una clase o un objeto/método. Esto es especialm<strong>en</strong>te<br />

útil cuando se invocan miembros estáticos.<br />

A.6. Ord<strong>en</strong> de los #includes<br />

Los ficheros de cabecera se incluy<strong>en</strong> <strong>en</strong> ord<strong>en</strong> «del más específico al más g<strong>en</strong>eral».<br />

Es decir, cualquier fichero de cabecera <strong>en</strong> el directorio local se incluye primero,<br />

después las «herrami<strong>en</strong>tas» propias, como require.h, luego cabeceras de librerías<br />

de terceros, después cabeceras de la librería estándar <strong>C++</strong>, y finalm<strong>en</strong>te cabeceras de<br />

la librería C.<br />

La justificación para esto vi<strong>en</strong>e de John Lakos <strong>en</strong> Large-Scale <strong>C++</strong> Software Design<br />

(Addison-Wesley, 1996):<br />

FIXME Los errores de uso lat<strong>en</strong>tes se puede evitar asegurando que el fichero<br />

.h de un compon<strong>en</strong>te es coher<strong>en</strong>te <strong>en</strong> si mismo - sin declaraciones o<br />

definiciones externas. Incluir el fichero .h como primera línea del fichero<br />

.c asegura que no falta ninguna pieza de información de la interfaz física<br />

del compon<strong>en</strong>te <strong>en</strong> el fichero .h (o, si la hay, aparecerá <strong>en</strong> cuanto int<strong>en</strong>te<br />

compilar el fichero .c.<br />

Si el ord<strong>en</strong> de inclusión fuese «desde el más específico al más g<strong>en</strong>eral», <strong>en</strong>tonces<br />

es más probable que si su fichero de cabecera no es coher<strong>en</strong>te por si mismo, lo<br />

descubrirá antes y prev<strong>en</strong>drá disgustos <strong>en</strong> el futuro.<br />

A.7. Guardas de inclusión <strong>en</strong> ficheros de cabecera<br />

Los guardas de inclusión se usan siempre <strong>en</strong> los ficheros de cabecera para prev<strong>en</strong>ir<br />

inclusiones múltiples durante la compilación de un único fichero .cpp. Los<br />

guardas de inclusión se implem<strong>en</strong>tan usado #define y comprobando si el nombre<br />

no ha sido definido previam<strong>en</strong>te. El nombre que se usa para el guarda está basado<br />

<strong>en</strong> el nombre del fichero de cabecera, pero con todas las letras <strong>en</strong> mayúscula y<br />

reemplazando el punto por un guión bajo. Por ejemplo:<br />

// IncludeGuard.h<br />

#ifndef INCLUDEGUARD_H<br />

#define INCLUDEGUARD_H<br />

// Body of header file here...<br />

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

El id<strong>en</strong>tificador de la última línea se incluye únicam<strong>en</strong>te por claridad. Algunos<br />

preprocesadores ignoran cualquier carácter que aparezca después de un #<strong>en</strong>dif,<br />

pero no es el comportami<strong>en</strong>to estándar y por eso el id<strong>en</strong>tificador aparece com<strong>en</strong>tado.<br />

A.8. Uso de los espacios de nombres<br />

En los ficheros de cabecera, se debe evitar de forma escrupulosa cualquier contaminación<br />

del espacio de nombres. Es decir, si se cambia el espacio de nombres<br />

fuera de una función o clase, provocará que el cambio ocurra también <strong>en</strong> cualquier<br />

fichero que incluya ese fichero de cabecera, lo que resulta <strong>en</strong> todo tipo de problemas.<br />

529<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!