Foros del Web » Programación para mayores de 30 ;) » C/C++ »

extern

Estas en el tema de extern en el foro de C/C++ en Foros del Web. Tengo mi archivo hora.h y ahi tengo definido int a = 10; y tengo mi programa e incluyo este encabezado y hago referencia a la ...
  #1 (permalink)  
Antiguo 11/09/2010, 08:10
 
Fecha de Ingreso: agosto-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
extern

Tengo mi archivo hora.h y ahi tengo definido int a = 10; y tengo mi programa e incluyo este encabezado y hago referencia a la variable a y me imprime bien, que raro, que no deberia declararla como extern para que puediera hacer referencia a ella fuera en otro archivo???? o entonces para que sirve extern

hora.h

int a = 10;


main.cpp
Código C++:
Ver original
  1. #include <iostream>
  2. #include "hora.h"
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.    
  9.     cout << a << endl;
  10.    
  11.     system("PAUSE");
  12.     return EXIT_SUCCESS;
  13. }
  #2 (permalink)  
Antiguo 11/09/2010, 08:44
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: extern

Te estas confundiendo. Hacer un #include de un archivo no significa que las definiciones esten en otro archivos.

Estar en "otro archivo" es cuando tenes varios archivos .c y no se enlazan con la sentencia include sino que desde la compilacion.

Para hacer referencia de una variable que esta en otro archivo se utiliza la expresion extern. Lo cual le indica al compilador que la posicion de memoria de esa variable sera encontrada en otro archivo. No se bien como trabaja internamente el compilador, pero ponele que deja un espacio en blanco, hasta que analiza el siguien archivo, encuentra la variable y le asigna un espacio de memoria virtual en el ejecutable.

Simplemente quedate con la idea abstracta de como sirve el extern, no tiene tanto sentido insvestigar como trabaja el compilador.
  #3 (permalink)  
Antiguo 13/09/2010, 04:37
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 meses
Puntos: 73
Respuesta: extern

La directiva #include significa "coge el contenido del archivo que te indico e insértamelo aquí". Es como si copiaras y pegaras con un editor de texto, el compilador lo verá como un solo archivo.

La directiva extern significa "esta variable está declarada en otro archivo". Esto significa que la variable debe estar declarada en algún otro archivo, exactamente con el mismo nombre y tipo, pero sin el atributo extern.

"Otro archivo" no significa un archivo con el que haces #include, sino uno completamente independiente dentro del mismo proyecto.

En un archivo de cabecera no debe haber implementación de funciones ni declaración de variables. Aunque no sea ilegal (el compilador se lo tragará), puede ser fuente de muchos problemas, especialmente si incluyes esa misma cabecera en varios archivos dentro de tu proyecto, aparte de que el compilador o el depurador pueden volverse locos si hay errores. En un archivo de cabecera debe haber solamente definición de macros (si las utilizas), definición de estructuras de datos, clases y plantillas, y prototipos de funciones. Como ya he indicado, meter aquí código ejecutable (entendiendo como tal la implementación de funciones y
la declaración de variables, que de cara al código máquina es código ejecutable) es sumamente peligroso.

Espero que este rollo responda a tu pregunta. Saludos,

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:40.