6.13 Ámbitos y existencia de variables y tipos


Las variables y los tipos de datos se pueden declarar en dos puntos:


Las variables declaradas fuera de bloques se llaman globales.
Las variables en el interior de un bloque son locales a ese bloque.

Ámbito


Una variable global se puede utilizar en todo el programa, desde el punto en que se declara.

Una variable local se puede utilizar desde el punto en que se declara hasta el final del bloque donde se declaró.

Si se declara una variable local con el mismo nombre de otra variable accesible en el bloque actual, la nueva variable oculta a la otra variable.


Existencia


Una variable global existe permanentemente mientras el programa se ejecuta.

Una variable local sólo existe mientras se está ejecutando código del bloque donde se ha declarado.
Así, una variable local a una función se crea cuando se llama a la función y desaparece cuando la función retorna.

Ejemplo de ámbitos


int global;

double area ( double base, double altura )
{
	double temp = base*altura;
	return temp;
}

main()
{
	int local;
	...
	while (1)
	{
	   int mas_local;
	   ...
	   {
		int mas_local_todavia;
		int local;
		...
	   }
	}
}

Ámbitos y existencia de tipos de datos


Los ámbitos y existencia de los tipos son similares a los de las variables.
Los tipos declarados fuera de bloques son globales al programa.
Los tipos declarados dentro de bloques son locales a ese bloque.

struct pepe { int a,b,c; }; /* ámbito global */

int funcion (void)
{
struct local { int x1,x2; }; /* ámbito local */
struct pepe una;
struct local otra;
}

struct pepe variable;		/* correcto */
struct local otra;	/* incorrecto: no estamos
 en el ámbito de “local” */