[C con Clase] Duda con preprocesador

David . di.romero en hotmail.es
Jue Oct 8 19:45:15 CEST 2009


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 
======================
 		 	   		  
_________________________________________________________________
Convierte las fotos que más te gustan en tu nuevo fondo de escritorio para el ordenador. Es fácil y además gratis
http://wallpapers.msn.com/es-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091008/54740d2f/attachment.html>


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