Variable externa

Una variable externa es, en los lenguajes de programación C y C++, una variable declarada con la palabra clave extern.

Campo de aplicación

[editar]

Dependiendo del contexto, el término puede adquirir dos significados diferentes. Cuando se hace uso del término para la declaración de una variable, extern hace saber al compilador que la variable se va a encontrar en la tabla de símbolos de otra unidad. Se utiliza para exponer variables pertenecientes a un archivo a uno o varios archivos adicionales. La declaración externa no es traducida por el compilador sino por el enlazador, con ello extern es un mecanismo válido para instalar modularidad a nivel del compilador.

Cuando se utiliza el término para la instanciación de una variable, extern traslada la variable a la tabla de símbolos de la unidad de traducción de forma que el símbolo pueda ser referenciado desde otras unidades. Para ello tiene que haber una implementación de la variable marcada como extern en otro sitio (normalmente en el archivo header).

Dos usos importantes de la externacionalización son: evitar referencias circulares (del estilo de declaraciones en secciones en lenguajes como Pascal) y evitar cadenas de dependencias compiladas.

Las variables externas pueden declararse al margen de los bloques de funciones en un archivo de código fuente de igual forma que se declara cualquier otra variable: especificando su tipo y su nombre. No se usa ningún especificador de clase de almacenamiento, la posición de la declaración dentro del archivo indica la clase de almacenamiento externo. La memoria para estas variables se asigna cuando el programa comienza a ser ejecutado y permanece asignado hasta la terminación del mismo. Para la mayoría de implementaciones en C, cada byte de memoria asignado para una variable externa es inicializado a cero.

El ámbito de variables externas es global, es decir, todo el código fuente en el archivo después de las declaraciones. Todas las funciones que siguen a la declaración pueden acceder a la variable externa usando su nombre. Sin embargo, si se declara una variable local con el mismo nombre, las referencias al nombre acceden a la célula de la variable local.

Ejemplo (C)

[editar]

Archivo 1:

  int VariableGlobal; // definición
  void UnaFunción (void); // declaración externa implícita
  
  int main() {
    VariableGlobal= 1;
    UnaFunción ();
    return 0;
  }

Archivo 2:

  extern int VariableGlobal;  // declaración externa

  void UnaFunción (void) {   
    ++ VariableGlobal;
  }

En este ejemplo la variable VariableGlobal es definida en el archivo 1. Para utilizar la misma variable en el archivo 2, tiene que ser declarada usando el keyword extern. Independientemente de la cantidad de archivos, una variable global solo se define una vez, sin embargo, tiene que ser declarada usando extern en cualquier archivo aparte de aquel que contiene la definición. Técnicamente, UnaFunción es también externa, pero en C y en C++ todas las funciones son consideradas externas por defecto y normalmente no necesitan ser declaradas.

Referencias

[editar]

Enlaces externos

[editar]