Yo defino un Header ejemplo.h con la siguiente estructura:
....
typedef struct{
int a;
tipo b;
}nombre;
extern nombre Variable;
void funcion();
...
#endif
Luego en mi ejemplo.c :
#include "ejemplo.h"
...
nombre Variable;
....
void funcion(){
Variable->a = 1;
}
En mi main.c debo poner:
#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!
no, si pruebas te vas a dar cuenta.
Cita de: netca en 19 Julio 2012, 21:42 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...
#include <stdio.h>
double variable = 0;
void funcX() {
extern double variable; // Hacemos referencia a la varible que esta afuera de este proceso... NO ES NECESARIO.
variable = 50; // Cambiamos su valor.
}
int main() {
printf("%f\n", variable); // imprimimos la variable
funcX();
printf("%f\n", variable); // imprimimos la variable
return 0;
}
La teoría se puede aplicar de la misma manera en varios archivos por ejemplo.
main.h
#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED
extern int x; // esta variable no esta declarada en ningun header pero si en algun archivo ".c" en este caso test.c
// si no se declara de esta manera dara un error de que no se a declarado dicha variable...
#endif // MAIN_H_INCLUDED
main.c
#include <stdio.h>
int x = 0;
extern int y; // esta variable no esta declarada en ningun header pero si en algun archivo ".c" en este caso test.c
// si no se declara de esta manera dara un error de que no se a declarado dicha variable...
extern void funcx(); // Le decimos que es una
int main() {
printf("x = %d\ny = %d\n", x, y); // imprimimos la variable
funcx(); // esta dentro del archivo text.h
printf("x = %d\ny = %d\n", x, y); // imprimimos la variable
y = 666;
printf("x = %d\ny = %d\n", x, y); // imprimimos la variable
return 0;
}
test.h
#ifndef TEST_H
#define TEST_H
#include "main.h"
void funcx();
#endif // TEST_H
test.c
#include "test.h"
int y = 0;
void funcx() {
x = 100;
y = 200;
}
o algo mas simplista pero no recomendado...
main.c
#include <stdio.h>
int x = 0;
extern int y; // esta variable no esta declarada en ningun header pero si en algun archivo ".c" en este caso test.c
// si no se declara de esta manera dara un error de que no se a declarado dicha variable...
extern void funcx(); // Le decimos que es una
int main() {
printf("x = %d\ny = %d\n", x, y); // imprimimos la variable
funcx(); // esta dentro del archivo text.h
printf("x = %d\ny = %d\n", x, y); // imprimimos la variable
y = 666;
printf("x = %d\ny = %d\n", x, y); // imprimimos la variable
return 0;
}
test.c
extern int x;
int y = 0;
void funcx() {
x = 100;
y = 200;
}
Dulces Lunas!¡.
Muchas gracias BlackZeroX (Astaroth) por los ejemplos y por haber aclarado mi duda :)
usar #pragma once directive para hacer el trabajo más facil, esto es para productos MS.
Los externs deben estar en los .h
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
char asd[128]="";
archivo2.cpp
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.
Gracias a todos por responder.