Muchas gracias por la explicación, ahora lo tengo más claro :)<br><br>Un saludo<br><br><div class="gmail_quote">El 8 de octubre de 2009 19:45, David . <span dir="ltr"><<a href="mailto:di.romero@hotmail.es">di.romero@hotmail.es</a>></span> escribió:<br>

<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">



<div>
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.<br>

<br>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).<br>

<br>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.<br>

<br>La estructura siempre es:<br><br>#ifndef NOMBRE_FICHERO_CABECERA_H_<br><br>#define NOMBRE_FICHERO_CABECERA_H_<br><br><definiciones del fichero de cabecera (signaturas de funciones, estructuras de clases, etc) ><br>

<br>#endif<br><br>Si te fijas, lo que hace este código de sentencias de preprocesamiento es:<br><br>1) Comprobar si existe definida ya la macro con el nombre NOMBRE_FICHERO_CABECERA_H_<br><br>   1.1) Si no está definida, la define e incluye el código del fichero de cabecera<br>

<br>   1.2) Si ya está definida, no la define y no incluye el código del fichero de cabecera<br><br>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.<br>

<br>Saludos.<br><br><hr>From: <a href="mailto:sepholin@gmail.com" target="_blank">sepholin@gmail.com</a><br>Date: Wed, 7 Oct 2009 22:51:02 +0200<br>To: <a href="mailto:cconclase@listas.conclase.net" target="_blank">cconclase@listas.conclase.net</a><br>

Subject: [C con Clase] Duda con preprocesador<div><div></div><div class="h5"><br><br>Buenas,<br><br>En varios programas escritos en C, en los ficheros .h he visto definiciones del tipo:<br><br>#ifndef CSPRITE_H_ (por poner un ejemplo)<br>

<br>.<br>.<br>.<br>código<br>.<br>.<br>.<br>#endif<br><br>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?.<br>



<br>Muchas gracias amigos<br clear="all"><br>-- <br>======================<br>  Javier Cancio del Busto<br>======================<br>  <a href="http://tuxete.wordpress.com" target="_blank">http://tuxete.wordpress.com</a> <br>

======================<br>                                          <br></div></div><div class="hm"><hr>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. <a href="http://motor.es.msn.com/" target="_blank">¡Nuevo Canal Motor! </a></div>

</div>
<br>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br><br clear="all"><br>-- <br>======================<br>

  Javier Cancio del Busto<br>======================<br>  <a href="http://tuxete.wordpress.com">http://tuxete.wordpress.com</a> <br>======================<br>