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 280 — #318<br />

✐<br />

Capítulo 10. Control de nombres<br />

de variables locales no ti<strong>en</strong><strong>en</strong> <strong>en</strong>lazado.<br />

Confusión<br />

He aquí un ejemplo de cómo los dos significados de static pued<strong>en</strong> confundirse.<br />

Todos los objetos globales ti<strong>en</strong><strong>en</strong> implícitam<strong>en</strong>te almac<strong>en</strong>ami<strong>en</strong>to de tipo estático, o<br />

sea que si usted dice (<strong>en</strong> ámbito de fichero)<br />

int a = 0;<br />

el almac<strong>en</strong>ami<strong>en</strong>to para a se llevará a cabo <strong>en</strong> el área para datos estáticos del<br />

programa y la inicialización para a sólo se realizará una vez, antes de <strong>en</strong>trar <strong>en</strong> main().<br />

Además, la visibilidad de a es global para todas las unidades de traducción.<br />

En términos de visibilidad, lo opuesto a static (visible tan sólo <strong>en</strong> su :unidad de<br />

traducción) es extern que establece explícitam<strong>en</strong>te que la visibilidad del nombre se<br />

exti<strong>en</strong>da a todas las unidades de traducción. Es decir, la definición de arriba equivale<br />

a<br />

extern int a = 0;<br />

Pero si utilizase<br />

static int a = 0;<br />

todo lo que habría hecho es cambiar la visibilidad, de forma que a ti<strong>en</strong>e <strong>en</strong>lace<br />

interno. El tipo de almac<strong>en</strong>ami<strong>en</strong>to no se altera, el objeto reside <strong>en</strong> el área de datos<br />

estática aunque <strong>en</strong> este caso su visibilidad es static y <strong>en</strong> el otro es extern.<br />

Cuando pasamos a hablar de variables locales, static deja de alterar la visibilidad<br />

y pasa a alterar el tipo de almac<strong>en</strong>ami<strong>en</strong>to.<br />

Si declara lo que parece ser una variable local como extern, significa que el<br />

almac<strong>en</strong>ami<strong>en</strong>to existe <strong>en</strong> alguna otra parte (y por tanto la variable realm<strong>en</strong>te es<br />

global a la función). Por ejemplo:<br />

//: C10:LocalExtern.cpp<br />

//{L} LocalExtern2<br />

#include <br />

int main() {<br />

extern int i;<br />

std::cout

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

Saved successfully!

Ooh no, something went wrong!