[C con Clase] directivas del preprocesador

Laureano G. Vaioli laureano_river en yahoo.com.ar
Vie Mayo 1 19:05:15 CEST 2009


El pasado 2009-04-25 23:05:35, Rednaxela escribió:
 
R> Hola,
R> Tengo un archivo de cabecera que se llama "funciones.h", el cual contiene los prototipos de unas funciones que realice en un archivo "funciones.c" en éste archivo  he agregado por ejemplo a "string.h", lo que quiero es que no vallar a resultar agregando dos veces a "string.h"; en el codigo fuente (principal) y tambien en "funciones.c".
R> Lo que voy es como provar que "string.h" ya esta agregado en el codigo fuente (principal) para que no lo agregue en "funciones.c", Gracias
R> _______________________________________________
R> Lista de correo Cconclase Cconclase en listas.conclase.net
R> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
R> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ

Otra buena practica que podes poner en uso con respecto a este tema es usar GUIDS. Que es una GUID? Es un numero aleatorio que es casi imposible que se repita, es practicamente imposible que existan 2 GUIDS identicas. Ahora bien, te estaras preguntando para que sirve esto. Dejame que te explique.
Supone que vos usas una libreria que yo hice. Ahora bien, en esta libreria que hice, tambien tengo una clase string, y en su fichero de cabecera declare lo siguiente (que es igual a lo que vos escribiste):

#ifndef _STRING_H_

// mi codigo

#define _STRING_H_ 
#endif

Ahora pensa un poquito. Que pasaria si vos pones eso mismo? Hay 2 posibilidades:
1) Se incluye tu archivo de cabecera pero no el mio.
2) Se incluye mi archivo pero no el tuyo.

Entonces, para evitar este tipo de inconvenientes (que pueden ser muy propensos a ocurrir, mas cuando el nombre del fichero es muy comun, como en el caso de string; y sobre todo en grandes proyectos, en donde se utilizan ampliamente librerias escritas por terceros) lo que se hace simplemente es agregar la GUID:
#ifndef _STRING_H_66aa8b8c029d4763b7ef3dc0dba37cdf
#define _STRING_H_66aa8b8c029d4763b7ef3dc0dba37cdf

// tu codigo

#endif //_STRING_H_66aa8b8c029d4763b7ef3dc0dba37cdf

De esta manera, el programa compilaria sin problemas e incluiria ambos archivos de cabecera. Espero que te halla servido!! Saludos


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