Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Aspectos de los LP
Diseo de compiladores
Lenguajes de Programacin
Scope
Scope
int x = 2;
Scope de x
void b() (
int x = 1;
printf (%d\n , x);
}
void c() {
printf(%d\n , x);
}
void main() { b(); c(); }
24/03/2015
Scope esttico
Un lenguaje usa scope esttico o lxico, si
mirando el programa podemos determinar el
scope de un smbolo X
El scope se determina siguiendo la estructura
del programa
Generalmente se basa en el concepto de
bloques anidados
Scope esttico
int x = 2;
void b() (
int x = 1;
printf (%d\n , x);
}
// Imprime 1
void c() {
printf(%d\n , x); // Imprime 2
}
void main() { b(); c(); }
main()
Scope dinmico
Un lenguaje utiliza scope dinmico, si con la
ejecucin del programa, el uso de la variable X
puede hacer referencia a diferentes
declaraciones de X
Con scope dinmico, el uso de un nombre X,
se refiere a la declaracin de X, en la funcin
mas recientemente llamada con esa
declaracin
Scope dinmico
int x = 2;
void b() (
int x = 1;
printf (%d\n , x);
}
// Imprime 1
void c() {
printf(%d\n , x); // Imprime 1
}
void main() { b(); c(); }
main()
c()
b()
b()
c()
24/03/2015
Scope en C
Un programa en C consiste en una secuencia
de declaraciones top-level de variables y
funciones
Las funciones pueden tener declaraciones de
variables. Estas incluyen variables locales y
parmetros
El scope de estas declaraciones estn restringidos
a la funcin en la que estn contenidos
Scope en C
El scope de una
declaracin top-level de
un nombre X, consiste
en todo el programa,
salvo aquellas funciones
en donde el nombre X
tambin haya sido
declarado
int x;
...
void f(...) {
char x;
...
x = 3;
...
}
...
x = i + 1
Bloques
Es un tipo de sentencia, puede aparecer en
lugar de cualquier tipo de sentencia del
programa
Esta formada por una secuencia de
declaraciones seguida de una secuencia de
sentencias
El anidamiento de bloques, es lo que se
conoce como estructura de bloques
Bloques
Decimos que una declaracin D pertenece a
un bloque B, si B es el bloque mas cercano
que contiene a D
O sea, D esta dentro de B, pero no dentro de
un bloque B que se encuentre en B
Esto nos permite definir reglas de scope para
cuando trabajamos con bloques
Bloques
Si una declaracin D de un nombre X,
pertenece a un bloque B, entonces el scope de
D, es el bloque B, incluyendo cualquier nivel
de anidamiento, pero excluyendo los bloques
B en los que X sea redefinida
24/03/2015
Environment
State
Variables
(Direcciones)
State
int x;
...
void f(...) {
int i;
...
i = 3;
...
}
...
x = i + 1
24/03/2015
Pasaje de parmetros
Parmetros actuales (argumentos)
Los que usamos en la invocacin a una funcin
Parmetros formales
Los que estn en la declaracin de la funcin
Call by value
El parmetro actual es evaluado (si es una
expresin), y su valor es copiado en el parmetro
formal
Es el mtodo usado en C, Java, C# y el mas comn
en C++
Los parmetros actuales no se ven afectados por
los cambios realizados en el procedimiento
Podemos pasar por valor, la direccin de
memoria de una variable
Call by reference
En este caso, se pasa la direccin de los
parmetros actuales, colocando la misma en
los parmetros formales
El acceso a travs de los parmetros formales,
se hace siguiendo esta direccin
Parmetros ref en C++