13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 90 — #128<br />

✐<br />

Capítulo 3. C <strong>en</strong> <strong>C++</strong><br />

//: C03:Global2.cpp {O}<br />

// Accessing external global variables<br />

extern int globe;<br />

// (The linker resolves the refer<strong>en</strong>ce)<br />

void func() {<br />

globe = 47;<br />

} ///:~<br />

El espacio para la variable globe se crea mediante la definición <strong>en</strong> Global.cpp,<br />

y esa misma variable es accedida por el código de Global2.cpp. Ya que el código<br />

de Global2.cpp se compila separado del código de Global.cpp, se debe informar<br />

al compilador de que la variable existe <strong>en</strong> otro sitio mediante la declaración<br />

extern int globe;<br />

Cuando ejecute el programa, observará que la llamada fun() afecta efectivam<strong>en</strong>te<br />

a la única instancia global de globe.<br />

En Global.cpp, se puede ver el com<strong>en</strong>tario con una marca especial (que es diseño<br />

mío):<br />

//{L} Global2<br />

Eso indica que para crear el programa final, el fichero objeto con el nombre Global2<br />

debe estar <strong>en</strong>lazado (no hay ext<strong>en</strong>sión ya que los nombres de las ext<strong>en</strong>siones de<br />

los ficheros objeto difier<strong>en</strong> de un sistema a otro). En Global2.cpp, la primera línea<br />

ti<strong>en</strong>e otra marca especial {O}, que significa «No int<strong>en</strong>tar crear un ejecutable<br />

de este fichero, se compila para que pueda <strong>en</strong>lazarse con otro fichero». El programa<br />

ExtractCode.cpp <strong>en</strong> el Volum<strong>en</strong> 2 de este libro (que se puede descargar de<br />

www.BruceEckel.com) lee estas marcas y crea el makefile apropiado de modo que<br />

todo se compila correctam<strong>en</strong>te (apr<strong>en</strong>derá sobre makefiles al final de este capítulo).<br />

3.6.2. Variables locales<br />

Las variables locales son las que se <strong>en</strong>cu<strong>en</strong>tran d<strong>en</strong>tro de un ámbito; son «locales»<br />

a una función. A m<strong>en</strong>udo se las llama variables automáticas porque aparec<strong>en</strong><br />

automáticam<strong>en</strong>te cuando se <strong>en</strong>tra <strong>en</strong> un ámbito y desaparec<strong>en</strong> cuando el ámbito se<br />

acaba. La palabra reservada auto lo <strong>en</strong>fatiza, pero las variables locales son auto por<br />

defecto, de modo que nunca se necesita realm<strong>en</strong>te declarar algo como auto.<br />

Variables registro<br />

Una variable registro es un tipo de variable local. La palabra reservada register<br />

indica al compilador «Haz que los accesos a esta variable sean lo más rápidos<br />

posible». Aum<strong>en</strong>tar la velocidad de acceso dep<strong>en</strong>de de la implem<strong>en</strong>tación, pero, tal<br />

como sugiere el nombre, a m<strong>en</strong>udo se hace situando la variable <strong>en</strong> un registro del<br />

microprocesador. No hay garantía alguna de que la variable pueda ser ubicada <strong>en</strong><br />

un registro y tampoco de que la velocidad de acceso aum<strong>en</strong>te. Es una ayuda para el<br />

compilador.<br />

Hay restricciones a la hora de utilizar variables registro. No se puede consular<br />

o calcular la dirección de una variable registro. Una variable registro sólo se puede<br />

90<br />

✐<br />

✐<br />

✐<br />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!