Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación para mostrarle publicidad personalizada y realizar análisis de uso de nuestro sitio.
Si continúas navegando consideramos que aceptas su uso. OK Más información | Y más

Reglas de alcance en C++ ( Introducción )





Hola amig@s! Siguiendo con los mini tutoriales de C++, en esta oportunidad veremos una introducción a  las reglas de alcance en C++ , este tutorial es importante en el ámbito de funciones y estructura de código que hemos visto,  la comprensión del mismo ayudaría a comprender un poco más el funcionamiento de nuestro lenguaje C++. Mostraremos un poco de teoría, así como un ejemplo práctico de reglas alcance sin mas pasamos al tutorial.



Reglas de Alcance:


A la porción de un programa en donde un identificador se puede utilizar se le conoce como alcance, por ejemplo cuando declaramos una variable local en un bloque, se puede hacer referencia a ésta solo en ese bloque y en bloques anidados dentro de dicho bloque.

Hay varios tipos de alcances para identificadores los cuales son:

  • Alcance de función
  • Alcance de archivo
  • Alcance de bloque
  • Alcance de prototipo de función
  • Alcance de clase
  • Alcance de espacio nombre
Cuando un identificador está declarado fuera de cualquier función tiene un alcance de archivo, este tipo de identificador es conocido en todas las funciones, esto va desde que se declaró el identificador hasta el final del archivo. Como anotación importante les digo que las variables globales, definiciones de funciones y prototipos de función tienen un alcance de archivo.

Las etiquetas son aquellos identificadores seguidos de dos puntos, por ejemplo etiqueta: y son los únicos identificadores con alcance de función. Éstas se pueden utilizar en cualquier parte dentro de la función en la que aparecen, pero no se puede hacer referencia a ellas en el cuerpo de la función.
Las etiquetas se utilizan en la sentencia switch como etiquetas CASE y en instrucciones goto que lo veremos mas adelante. También son detalles de implementación que las funciones ocultan entre sí y a esto le llamamos ocultamiento de información.

Los identificadores que se declaran dentro de un bloque tienen un alcance de bloque, este alcance de bloque comienza en la declaración del identificador y termina en la llave derecha de terminación "}" del bloque en el que se declaró al identificador.

Las variables locales tienen un alcance de bloque, así mismo como los parámetros de función, los cuales también son varialbes locales de la función...Cualquier bloque puede contener declaraciones de variables y cuando los bloques están anidados, y un identificador en un bloque externo tiene el mismo nombre que el identificador en el bloque interno, el identificador externo está "oculto" hasta que el bloque interno termina.

Mientras se ejecuta el bloque interno, el bloque interno ve los valores de sus propios identificadores locales y no el valor del identificador con nombre igual en el bloque que lo encierra. Las variables locales declaradas como static también tienen alcance de bloque, aún cuando existen desde que comenzó la ejecución del programa.La duración del almacenamiento NO afecta el alcance de un identificador, así que pongamos muchísima atención a esto para el futuro , así como también tener muy en cuenta que los únicos identificadores con alcance de función son aquellos que se utilizan en la lista de parámetros de un prototipo de función.

Veamos el siguiente ejemplo:


Compilado y ejecutado:



Lo que vimos en el ejemplo son cuestiones de alcance con variables globales, automáticas locales y estáticas locales. Veamos en la linea 14 declaramos e inicializamos la variable m en 1, esta variable global se oculta en cualquier función que se declare una variable con el nombre m. En la línea 18 ya podemos observar como hicimos una variable con m inicializada con 7 siempre en local en main. En la linea 23 iniciamos un nuevo alcance anidado a la función main luego le decimos que ya no está oculta. Sé que puede ser un poco confuso al principio, pero con un poco de práctica seguramente no tardarán en comprenderlo.

Creamos 3 funciones cada una toma argumentos pero no devuelve nada, la función usoLocal defina la variable automática de m, y la inicializa en 77, cuando ésta llama a usoLocal depliega la variable y posterior la incrementa para desplegarla nuevamente.

La función usoSLocal declara la variable estática m y la inicializa en 21, y a su vez retiene sus valores aún cuando se encuentran fuera de alcance...Para ser mas claros incluso cuando no está en ejecución en la función que se declaró, esto sucede con las variables declaradas como static.

La función usoGlobal no declara ninguna variable, por lo tanto cuando ésta hace referencia a la variable m se utiliza la variable global m.

Bueno amig@s esto es todo por este tutorial, espero sea de ayuda y si tienen alguna duda con gusto podemos resolverla, en el próximo tutorial de C++ veremos las funciones recursivas llamadas también "Recursividad de funciones", por lo pronto me suscribo de ustedes atentamente...By 4uxx

0 comentarios :

>

Publicar un comentario

 
Copyright © Developers For Life