Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





#include y #ifndef

Iniciado por davidgf, 21 de Noviembre de 2007, 09:29:58 PM

« anterior - próximo »

fiero

Cita de: "davidgf"I en los .h una proteccion para evitar la doble inclusion/declaración.

Mejor usa 'Y' griega, que algunos leemos foros en inglés y parece que estás todo el rato "Yo" "yo" "yo". Resulta bastante confuso  :wink:  

saludos
www.videopanoramas.com Videopanoramas 3D player

shephiroth

Cita de: "davidgf"No lo se pero diria que no...
Ok, pero si me dices pq no lo crees me servira de algo ^_^


Cita de: "davidgf"En los .h (declaraciones) no incluir nada (que no sea string.h, windows... etc) y usar class LaClase;
No se que profesor en su dia me dijo que en un .h incluir una cabecera del sistema (string.h, windows, etc...es decir, que no fuera propia del proyecto) es un error de 0.

No me quedo muy claro el tema, y cuando le pregunte tras terminar la clase me explico que el compilador (o mejor dicho el precompilador) siempre empieza a trabajar por los .cpp (o .c), y que si al llegar al .h no encuentra una clase es pq me falta el include en el .cpp nunca en el .h. Me explico tambien que incluir desde el .h puede llevar a errores bastante raros y dificiles de detectar.......intentare poner un ejemplo:

libreria_rara.h

#ifndef _LIBRERIA_RARA_
#define _LIBRERIA_RARA_

#ifndef _OPCION_EXTENDIDA_
#define OPT_DEBUG 0
#else
#define OPT_DEBUG 1
#endif

...resto de libreria

#endif


a.h

#ifndef _CLASS_A_
#define _CLASS_A_

#define _OPCION_EXTENDIDA_
#include libreria_rara.h

...resto de clase

#endif


principal.cpp

#include "windows.h"
#include "a.h"
//no definimos _OPCION_EXTENDIDA_ pq no queremos extension
#include "libreria_rara.h"


En este codigo se ve claro que habra que tener cuidado pq a.h define esa variable, pero hay ocasiones en las q no es tan claro ni tan "poco peligroso".

Pogacha

CitarEn los .h (declaraciones) no incluir nada (que no sea string.h, windows... etc) y usar class LaClase; en vez de ello.
Ojo, que esto es la mejor practica en teoria, permite una modulacion mayor y baja los tiempos de compilación, pero muchas veces no lo hacemos asi por temas de practicidad, especialmente cuando tenemos funciones inline, estructuras anidadas o clases principales como singletones u otras donde usar punteros no te serviría de mucho.

Tienes que buscar un equilibrio en compromiso entre las interrelaciones de los .h, prácticidad de escritura/lectura y funcionalidad del codigo.

Generalmente lo que se hace es separar en modulos y submodulos, de esta manera para cortar interdependencias entre inclusiones solo tienes que fijarte en pequeños sub modulos.

Esto se aprende con práctica, luego veras que ni bien te salte un error de este tipo ya vas a saber que paso y con poco podrás solucionarlo. Con el tiempo aprenderás a preverlo y no lo cometerás mas.

davidgf

Cita de: "fiero"
Cita de: "davidgf"I en los .h una proteccion para evitar la doble inclusion/declaración.

Mejor usa 'Y' griega, que algunos leemos foros en inglés y parece que estás todo el rato "Yo" "yo" "yo". Resulta bastante confuso  :wink:  

saludos

uups perdón... esto es culpa del catalán, luego escribo 'y' donde no toca i viceversa....
Tàrraco: una aventura por la Tarragona romana (http://tarraco.davidgf.net)

Pogacha

Citaresto es culpa del catalán
... yo pensaba que escribias mal de simpatico tan solo :(
se me cayo un idolo.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.