Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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 />
✐