• Lunes 23 de Diciembre de 2024, 08:45

Autor Tema:  Variables Globales Y Archivos Cabecera  (Leído 1790 veces)

gushynet

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Variables Globales Y Archivos Cabecera
« en: Miércoles 12 de Mayo de 2004, 01:01 »
0
hola a todos, os escribo a ver si alguien me puede orientar un poco sobre unas cuantas cuestiones que no he conseguido resolver con el material que utilizo para aprender C y C++.

Estoy desarrollando una pequeña aplicación que consta de varios ficheros.


1. He utilizado el fichero stdlib.h en varios ficheros además de incluirlo en el programa principal. La cuestión es si el compilador añade el stdlib.h en cada fichero (lo que haría aumentar el ejecutable, creo) o por el contrario lo optimiza de alguna manera para que todos los ficheros de mi programa utilicen el mismo stdlib.h aunque hayan varios archivos que lo incluyan?

2. Tengo la intención de utilizar algunas variables globales a todos los archivos que he creado y la forma que he pensado para implementarlo es colocar todas las variables globales en un archivo para centralizar el control de dichas variables. La cuestión es que no se como hacerlo ya que lo que he intentado es crearme un fichero variables.h y declarar las variables en variables.c inicializandolas a un valor determinado, pero no lo he conseguido. No se si lo que intento no esta permitido o solo las puedo declarar en el programa principal, así que si alguien me puede aclarar esto estaría muy agradecido

3. Por ultimo una cuestión que no se si es importante pero aun así lo pregunto, situación: tengo los siguientes ficheros:  

principal.c

memorias.c
memoria.h

disco.c
disco.h

estructuras.c
estructuras.h

principal, memoria y disco hacen uso de estructura
disco hace uso de memoria

todos hacen uso de librerías estandares(stdlib,stdio,...)

mi pregunta es:

   a) donde debo incluir los archivos de cabecera estandares(stdio,...) en el .h o en el .c? lo pregunto porque creo    que en alguna ocasion el resultado que obtenia era idéntico poniéndolo en el .h y en el .c por lo que no se donde es    mas correcto o optimo.
   
   B) donde incluyo los ficheros creados por mi, por ejemplo: donde pongo el memoria.h en disco.h o en disco.c?
   
   


Gracias de antemano por vuestra ayuda. Un saludo

Pd: lo siento por haberme extendido tanto.

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Variables Globales Y Archivos Cabecera
« Respuesta #1 en: Miércoles 12 de Mayo de 2004, 03:43 »
0
Hola!!!!!!!

1º Pregunta: Cuando se incluye algun tipo de libreria standard q viene con el compilador, por mas q vos la incluyas mil veces, en tu proyecto se hace una sola vez debido a instrucciones al PRE-Compilador para q esto ocurra.
Lo q yo te recomiendo, es estendible a partir de este ejemplo:
clasepadre.h
clasehija.h
principal.c/cpp

En clasepadre.h inclui todo lo q necesite.
En clasehija.h inclui a clasepadre.h mas todo lo referente al archivo donde estas
En principal.c/cpp inclui a clasehija.h mas todo lo q necesite este archivo.

A la hora de escribir un punto .h es mas q eficiente y muchas veces necesarios el uso de instrucciones al pre-compilador de este estilo:
#ifndef _CLASEPADRE_H
#define _CLASEPADRE_H

//Aca pones lo q va realmente en tu .h

#endif

Con esto evitas la referencia circular a .h

Espero q haya sido claro en esto.

2º Pregunta:
Si queres usar variables globales a todo tu proyecto deberias anteponerle "extern" en el .h donde este declarada la misma. Pensa q declaracion no es lo mismo q definicion (implementacion). La definicion de la variable la haces en el .c/cpp y luego es compartido ese valor en todo tu proyecto. Si quisieras usar globales locales a tu archivo sin posibilidad de confusion con otra variable con el mismo nombre en otro archivo de tu proyecto, deberias anteponerle la palabra reservada "static".

3º Pregunta:
Lo optimo es incluir .h desde algun .h .
Deberia ser asi:
(DISCO.h)
#include "Estructura.h"
#include "Memoria.h"

(MEMORIA.h)
#include "Estructura.h"

(PRINCIPAL.h)
#include "Estructura.h"

Si en esto no haces lo q te dije q hagas en el punto 1 , se generaria una referencia circular y no te andaria nada de nada.

Bueno, espero q haya sido claro y q haya servido

Salu2!!!!!

Desde Buenos Aires

Nicolas

gushynet

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Variables Globales Y Archivos Cabecera
« Respuesta #2 en: Miércoles 12 de Mayo de 2004, 17:27 »
0
Antes que nada agradecerte que me hayas echado un cable

con respecto a tu respuesta:

"Lo optimo es incluir .h desde algun .h .
Deberia ser asi:
(DISCO.h)
#include "Estructura.h"
#include "Memoria.h"

(MEMORIA.h)
#include "Estructura.h"

(PRINCIPAL.h)
#include "Estructura.h"    "

en Disco.c tuve que incluir las librerias stdio.h y string.h, ademas de disco.h.
mi pregunta es si da lo mismo poner stdio.h y string.h en disco.c o en disco.h
----------------------------------

"Si queres usar variables globales a todo tu proyecto deberias anteponerle "extern" en el .h donde este declarada la misma. "

y si quiero inicializar esa variable con algun valor? la inicio en el .c?Ejemplo:

en disco.h

extern int a;
-----
en disco.c

int a=5;

------------------------------------

Bueno eso es todo, gracias por tu ayuda, y de nuevo lo siento si me extendi demansiado. Un saludo desde las palmas

 :D  :D  :D  :D  :P  :rolleyes:  :)  :D  :D  :D  :D  :D  :D

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Variables Globales Y Archivos Cabecera
« Respuesta #3 en: Miércoles 12 de Mayo de 2004, 19:54 »
0
Hola de nuevo!!

1º) En disco.h inclui stdio.h y string.h y en disco.c/cpp inclui disco.h y eso tiene q andar si o si.

2º) Tal cual vos lo dijiste. La verdad es q si la inicializas a la variable en el .h deberia andar pero no se, no me fije nunca.

Salu2!!!!!!