[C con Clase] Duda con preprocesador

Javier Cancio del Busto sepholin en gmail.com
Jue Oct 8 21:11:08 CEST 2009


Muchas gracias por la explicación, ahora lo tengo más claro :)

Un saludo

El 8 de octubre de 2009 19:45, David . <di.romero en hotmail.es> escribió:

>  Es una convención usada en C y en C++: todos los ficheros de cabecera (que
> contienen las signaturas de funciones y la estructura (atributos y
> servicios) de clases en C++; en C suelen ser ficheros con extensión .h y en
> C++ con esa misma extensión ó directamente sin extensión alguna) incluyen
> todas sus definiciones entre ese par de sentencias de preprocesador que
> mencionas.
>
> Esto es así para que, si incluyes un fichero de cabecera en otro fichero
> (sea de cabecera ó de implementación) el cual, a su vez, puede que lo
> incluya de nuevo directa ó indirectamente, sólo se termine incluyendo una
> única vez. De esta forma, no se repiten las mismas definiciones (de
> funciones o de clases) varias veces, lo cual produciría errores en tiempo de
> compilación (redefinición de nombres de función y de clases, por ejemplo).
>
> El nombre elegido en la instrucción de preprocesador #ifndef suele ser el
> nombre del fichero de cabecera seguido de _H_. Es una convención de nombres
> para que no se usen nombres con esta sintaxis para otras cosas, de forma que
> se asegure, en la medida de lo posible, que sólo esté definido ese nombre si
> ya se ha incluido el fichero de cabecera en cuestión.
>
> La estructura siempre es:
>
> #ifndef NOMBRE_FICHERO_CABECERA_H_
>
> #define NOMBRE_FICHERO_CABECERA_H_
>
> <definiciones del fichero de cabecera (signaturas de funciones, estructuras
> de clases, etc) >
>
> #endif
>
> Si te fijas, lo que hace este código de sentencias de preprocesamiento es:
>
> 1) Comprobar si existe definida ya la macro con el nombre
> NOMBRE_FICHERO_CABECERA_H_
>
>    1.1) Si no está definida, la define e incluye el código del fichero de
> cabecera
>
>    1.2) Si ya está definida, no la define y no incluye el código del
> fichero de cabecera
>
> Para que esto funcione, el nombre NOMBRE_FICHERO_CABECERA_H_ sólo se debe
> definir en este fichero de cabecera. No se debe definir ese mismo nombre en
> cualquier otro fichero.
>
> Saludos.
>
> ------------------------------
> From: sepholin en gmail.com
> Date: Wed, 7 Oct 2009 22:51:02 +0200
> To: cconclase en listas.conclase.net
> Subject: [C con Clase] Duda con preprocesador
>
>
> Buenas,
>
> En varios programas escritos en C, en los ficheros .h he visto definiciones
> del tipo:
>
> #ifndef CSPRITE_H_ (por poner un ejemplo)
>
> .
> .
> .
> código
> .
> .
> .
> #endif
>
> Y mi duda es, ¿para qué se utiliza exactamente? Me he mirado en alguna
> página que lo comentaban pero no me queda muy claro... ¿Y por qué siempre
> lleva subguiones ( _ ) en los nombres?.
>
> Muchas gracias amigos
>
> --
> ======================
>  Javier Cancio del Busto
> ======================
>  http://tuxete.wordpress.com
> ======================
>
> ------------------------------
> Entra al Nuevo Canal Motor y descubre por qué los coches más rápidos sólo
> aparcan en MSN. Nuevo diseño, más completo y abierto a tu opinión. ¡Nuevo
> Canal Motor! <http://motor.es.msn.com/>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
======================
 Javier Cancio del Busto
======================
 http://tuxete.wordpress.com
======================
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091008/49774c71/attachment.html>


Más información sobre la lista de distribución Cconclase