Ambito de un nombre

BanderaTuxUna declaración introduce un nombre (identificador) en un ámbito, o dicho de otro modo, es la parte de un programa donde dicho nombre puede ser referenciado. Un nombre puede ser limitado a un bloque, a un fichero, a una declaración o definición de función, a una clase, a un espacio de nombres, etc.

 Nombres globales y locales

Cuando un nombre se declara en un programa fuera de todo bloque ({…}), se dice que es global, o sea accesible desde el punto donde empieza su definición hasta el final del fichero fuente.

grafico_bloques_1

Si la declaración de un nombre se hace dentro de un bloque ({…}), se dice que el nombre es local y tiene valor desde su punto de declaración hasta el final del bloque. Por lo tanto, un nombre local es accesible solamente dentro del bloque al que pertenece.

Este ejemplo nos permitirá ver el ámbito de dos variables var1 y var2, dependiendo de si están definidas dentro de un bloque o fuera. Analizando el ámbito de las variables distinguimos cuatro niveles:

  • Nivel externo (fuera de todo bloque)
    • Las variables definidas en este nivel son accesibles desde el punto de definición hasta el final del programa.
  • El nivel del bloque de la función principal (main)
    • Las variables definidas en este nivel solamente son accesibles desde la propia función main y, por lo tanto, son accesibles en los bloques 1 y 2.
  • El nivel del bloque 1 (sentencia completa)
    • Las variables definidas en este nivel solamente son accesibles en el interior del bloque 1 y, por lo tanto, en el bloque 2.
  • El nivel del bloque 2 (sentencia compuesta)
    • Las variables definidas en este nivel solamente son accesibles en el interior del bloque.

bloques_listado_2

Si compilamos y ejecutamos la salida sería:

bloques_salida_1

bloques_3

Vemos en el ejemplo anterior que una variable global y otra local pueden tener el mismo nombre, pero no guardan relación una con otra, lo cual sa lugar a que la variable global quede ocultada (anulada) en el ámbito de la local del mismo nombre.

Como ejemplo veamos que ocurre si modificamos el programa anterior con var1 si la variable ocultada la referenciamos (::):

bloques2

Mostraría la salida:

bloques2_salida

 No hay otra forma de utilizar una variable oculta si no es referenciandola (::).

atras2

 

 

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.