Al crear una variable, hay varias alternativas para especificar la vida de dicha variable, la forma en que se decide la ubicación para esa variable y cómo la tratará el compilador.
Las variables globales se definen fuera de todos los cuerpos de
las funciones y están disponibles para todo el programa (incluso
el código de otros ficheros). Las variables globales no están
afectadas por ámbitos y están siempre disponibles (es decir, la
vida de una variable global dura hasta la finalización del
programa). Si la existencia de una variable global en un fichero
se declara usando la palabra reservada extern
en otro
fichero, la información está disponible para su utilización en
el segundo fichero. A continuación, un ejemplo del uso de
variables globales:
//: C03:Global.cpp //{L} Global2 // Demonstration of global variables #include <iostream> using namespace std; int globe; void func(); int main() { globe = 12; cout << globe << endl; func(); // Modifies globe cout << globe << endl; } ///:~
Listado 3.23. C03/Global.cpp
Y el fichero que accede a globe
como un
extern
:
//: C03:Global2.cpp {O} // Accessing external global variables extern int globe; // (The linker resolves the reference) void func() { globe = 47; } ///:~
Listado 3.24. C03/Global2.cpp
El espacio para la variable globe
se crea
mediante la definición en Global.cpp
, y esa
misma variable es accedida por el código de
Global2.cpp
. Ya que el código de
Global2.cpp
se compila separado del código
de Global.cpp
, se debe informar al
compilador de que la variable existe en otro sitio mediante
la declaración
extern int globe;
Cuando ejecute el programa, observará que la llamada
fun()
afecta efectivamente a la única
instancia global de globe
.
En Global.cpp
, se puede ver el comentario
con una marca especial (que es diseño mío):
//{L} Global2
Eso indica que para crear el programa final, el fichero objeto
con el nombre Global2
debe estar enlazado
(no hay extensión ya que los nombres de las extensiones de los
ficheros objeto difieren de un sistema a otro). En
Global2.cpp
, la primera línea tiene otra
marca especial {O}
, que significa «No
intentar crear un ejecutable de este fichero, se compila para
que pueda enlazarse con otro fichero». El programa
ExtractCode.cpp
en el Volumen 2 de este
libro (que se puede descargar de www.BruceEckel.com) lee
estas marcas y crea el makefile
apropiado
de modo que todo se compila correctamente (aprenderá sobre
makefiles al final de este capítulo).