Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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