Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kherom en 19 Enero 2012, 20:55 pm



Título: Variables globales en ficheros .h
Publicado por: Kherom en 19 Enero 2012, 20:55 pm
Buenas, tengo un problema, he intentado declarar algunas variables globales en ficheros .h para accedera a ellas desde cualquier punto sin preocuparme de ellas, pero siempre me las intenta declarar varias veces y tira error pesar de que supuestamente sólo debería definir el fichero una vez ya que lo hago tal que así:

Código
  1. #ifndef LOQUESEA
  2. #define LOQUESEA
  3.  
  4. //Declaraciones
  5.  
  6. #endif //LOQUESEA

¿Sabéis qué hago mal o si simplemente no se puede?


Título: Re: Variables globales en ficheros .h
Publicado por: soyloqbuskas en 20 Enero 2012, 00:49 am
Buenas Kherom !

Hasta donde yo se, no se puede hacer declaraciones de variables en las cabeceras (.h) de los programas. En las cabeceras solo estan los nombres de las funciones y procedimientos a las que otro modulo o clase puede llamar.

Si quieres crear una variable global para un modulo, deberas declararla en el .c fuera de cualquier funcion. Asi esa variable sera global para ese modulo.

Si lo que quieres hacer es crear una variable global para todos los modulos, creo que esto no se puede hacer.

De todas formas, no te recomiendo el uso de variables globales, ya que cuando una funcion f1() usa esa variable deja la variable con basura y si luego la funcion f2() la usa, puede que la funcion f2() no te muestre un resultado correcto. Asi que debes tener mucho cuidado con las variables globales.

Espero haberte servido de ayuda, un saludo.


Título: Re: Variables globales en ficheros .h
Publicado por: Kherom en 20 Enero 2012, 02:20 am
Creo que sí que se pueden hacer globales a todos los ficheros con extern, al menos en c++ se puede, en c creo que también. Por otro lado si dejo una variable como global es por que obviamente quiero compartir datos entre funciones, no voy a declarar el contador de una función como global xD (En mi caso la variable es un puntero con todos los datos de usuarios cargados desde un fichero, aunque también lo he usado para IDs, manejadores, etc)


Título: Re: Variables globales en ficheros .h
Publicado por: rir3760 en 20 Enero 2012, 04:04 am
El problema se debe a la diferencia entre declaraciones y definiciones. Si necesitas de una variable "global" (técnicamente estas no existen en C, son una combinación de "file scope" y "external linkage") debes declarar la variable en el archivo de inclusión utilizando la palabra reservada "extern", por ejemplo:
Código
  1. /* Declaracion de la interfaz */
  2.  
  3. extern int x;

Esa variable la debes definir en una sola unidad (sin utilizar "extern") y, por supuesto, fuera de toda función:
Código
  1. int x;

De esa forma tienes la declaración de la variable en varias unidades (al incluir el encabezado) y sola una definición (en la unidad que lo requiera).

Un saludo