elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Variables Extern
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Variables Extern  (Leído 2,778 veces)
netca

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Variables Extern
« en: 19 Julio 2012, 21:42 pm »

Yo defino un Header ejemplo.h con la siguiente estructura:

Código:
....
typedef struct{
      int a;
      tipo b;

}nombre;

extern nombre Variable;

void funcion();
...

#endif

Luego en mi ejemplo.c :
Código:
#include "ejemplo.h"

...
nombre Variable;
....

void funcion(){
   Variable->a = 1;
}


En mi main.c debo poner:

Código:
#include "ejemplo.h"

int main(){
     funcion();
     
}

Si luego de llamar a funcion en mi main.c quisiera acceder a Variable->a desde main tengo que definir algo en main.c ademas del include?
Saludos!


En línea

fary


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Variables Extern
« Respuesta #1 en: 19 Julio 2012, 21:58 pm »

no, si pruebas te vas a dar cuenta.


En línea

Un byte a la izquierda.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Variables Extern
« Respuesta #2 en: 19 Julio 2012, 22:38 pm »

Si luego de llamar a funcion en mi main.c quisiera acceder a Variable->a desde main tengo que definir algo en main.c ademas del include?

En teoría deberías poner extern nombre Variable; pero ya lo has hecho en el header que incluyes, asi que no tienes que hacer nada mas...

--->

Te dejo algunos ejemplos...

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. double variable = 0;
  5.  
  6. void funcX() {
  7.    extern double variable; //  Hacemos referencia a la varible que esta afuera de este proceso... NO ES NECESARIO.
  8.    variable = 50;          //  Cambiamos su valor.
  9. }
  10.  
  11. int main() {
  12.    printf("%f\n", variable); //  imprimimos la variable
  13.    funcX();
  14.    printf("%f\n", variable); //  imprimimos la variable
  15.    return 0;
  16. }
  17.  
  18.  

La teoría se puede aplicar de la misma manera en varios archivos por ejemplo.

main.h
Código
  1.  
  2. #ifndef MAIN_H_INCLUDED
  3. #define MAIN_H_INCLUDED
  4.  
  5. extern int x;   //  esta variable no esta declarada en ningun header pero si en algun archivo ".c" en este caso test.c
  6.                //  si no se declara de esta manera dara un error de que no se a declarado dicha variable...
  7.  
  8. #endif // MAIN_H_INCLUDED
  9.  
  10.  

main.c
Código
  1.  
  2. #include <stdio.h>
  3.  
  4. int x = 0;
  5. extern int y;   //  esta variable no esta declarada en ningun header pero si en algun archivo ".c" en este caso test.c
  6.                //  si no se declara de esta manera dara un error de que no se a declarado dicha variable...
  7.  
  8. extern void funcx();    //  Le decimos que es una
  9.  
  10. int main() {
  11.    printf("x = %d\ny = %d\n", x, y);  //  imprimimos la variable
  12.    funcx();            //  esta dentro del archivo text.h
  13.    printf("x = %d\ny = %d\n", x, y);  //  imprimimos la variable
  14.    y = 666;
  15.    printf("x = %d\ny = %d\n", x, y);  //  imprimimos la variable
  16.    return 0;
  17. }
  18.  
  19.  

test.h
Código
  1.  
  2.  
  3. #ifndef TEST_H
  4. #define TEST_H
  5.  
  6. #include "main.h"
  7.  
  8. void funcx();
  9.  
  10. #endif // TEST_H
  11.  
  12.  

test.c
Código
  1.  
  2. #include "test.h"
  3.  
  4. int y = 0;
  5.  
  6. void funcx() {
  7.    x = 100;
  8.    y = 200;
  9. }
  10.  
  11.  

o algo mas simplista pero no recomendado...

main.c
Código
  1.  
  2. #include <stdio.h>
  3.  
  4. int x = 0;
  5. extern int y;   //  esta variable no esta declarada en ningun header pero si en algun archivo ".c" en este caso test.c
  6.                //  si no se declara de esta manera dara un error de que no se a declarado dicha variable...
  7.  
  8. extern void funcx();    //  Le decimos que es una
  9.  
  10. int main() {
  11.    printf("x = %d\ny = %d\n", x, y);  //  imprimimos la variable
  12.    funcx();            //  esta dentro del archivo text.h
  13.    printf("x = %d\ny = %d\n", x, y);  //  imprimimos la variable
  14.    y = 666;
  15.    printf("x = %d\ny = %d\n", x, y);  //  imprimimos la variable
  16.    return 0;
  17. }
  18.  
  19.  

test.c
Código
  1.  
  2. extern int x;
  3. int y = 0;
  4.  
  5. void funcx() {
  6.    x = 100;
  7.    y = 200;
  8. }
  9.  
  10.  
  11.  

Dulces Lunas!¡.
« Última modificación: 19 Julio 2012, 22:57 pm por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
netca

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Variables Extern
« Respuesta #3 en: 20 Julio 2012, 01:54 am »

Muchas gracias BlackZeroX (Astaroth) por los ejemplos y por haber aclarado mi duda :)
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Variables Extern
« Respuesta #4 en: 20 Julio 2012, 06:56 am »

usar #pragma once directive para hacer el trabajo más facil, esto es para productos MS.
Los externs deben estar en los .h
En línea

david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Re: Variables Extern
« Respuesta #5 en: 25 Julio 2012, 01:24 am »

si no estamos hablando de ser fino a la hora de programar, te diría que los externs pueden ir ya sea en archivos de fuente o archivos de cabecera, ya que funciona lo mismo. se trata de usar extern por ejemplo para variables globales que están en un archivo fuente y las necesitas en otro.

archivo1.cpp

Código:
char asd[128]="";


archivo2.cpp

Código:
extern asd[128];


nótese la diferencia entre la declaración que al mismo tiempo hace asignación, y en la referencia extern en la cual no se pone la asignación obviamente.
En línea

netca

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Variables Extern
« Respuesta #6 en: 25 Julio 2012, 01:57 am »

Gracias a todos por responder.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pasar variables por formulario sin variables globales¿? « 1 2 »
PHP
hardkoo 11 9,219 Último mensaje 22 Noviembre 2006, 12:55 pm
por chicuela66
variables GET en PHP « 1 2 »
PHP
kanser 12 3,994 Último mensaje 17 Enero 2008, 07:40 am
por kanser
Variables dentro de variables (batch)
Scripting
MK-Ultra 8 7,433 Último mensaje 6 Febrero 2008, 23:18 pm
por GUN$
[BATCH] ¿Como puedo meter variables dentro de variables?
Scripting
Meine programmen 1 3,847 Último mensaje 24 Marzo 2012, 16:48 pm
por Eleкtro
detalle sobre extern
Programación C/C++
bash 1 1,471 Último mensaje 24 Febrero 2016, 16:16 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines