C - Reglas de alcance

Un alcance en cualquier programación es una región del programa donde una variable definida puede tener su existencia y más allá de esa variable no se puede acceder. Hay tres lugares donde las variables se pueden declarar en el lenguaje de programación C:

  • Dentro de una función o un bloque que se llama local variables.

  • Fuera de todas las funciones a las que se llama global variables.

  • En la definición de los parámetros de función que se llaman formal parámetros.

Entendamos lo que son local y global variables, y formal parámetros.

Variables locales

Las variables que se declaran dentro de una función o bloque se denominan variables locales. Solo pueden ser utilizados por declaraciones que están dentro de esa función o bloque de código. Las variables locales no son conocidas por funciones fuera de las suyas. El siguiente ejemplo muestra cómo se utilizan las variables locales. Aquí todas las variables a, byc son locales a la función main ().

#include <stdio.h>
 
int main () {

  /* local variable declaration */
  int a, b;
  int c;
 
  /* actual initialization */
  a = 10;
  b = 20;
  c = a + b;
 
  printf ("value of a = %d, b = %d and c = %d\n", a, b, c);
 
  return 0;
}

Variables globales

Las variables globales se definen fuera de una función, normalmente encima del programa. Las variables globales mantienen sus valores durante la vida útil de su programa y se puede acceder a ellas dentro de cualquiera de las funciones definidas para el programa.

Cualquier función puede acceder a una variable global. Es decir, una variable global está disponible para su uso en todo el programa después de su declaración. El siguiente programa muestra cómo se utilizan las variables globales en un programa.

#include <stdio.h>
 
/* global variable declaration */
int g;
 
int main () {

  /* local variable declaration */
  int a, b;
 
  /* actual initialization */
  a = 10;
  b = 20;
  g = a + b;
 
  printf ("value of a = %d, b = %d and g = %d\n", a, b, g);
 
  return 0;
}

Un programa puede tener el mismo nombre para las variables locales y globales, pero el valor de la variable local dentro de una función tendrá preferencia. Aquí hay un ejemplo:

#include <stdio.h>
 
/* global variable declaration */
int g = 20;
 
int main () {

  /* local variable declaration */
  int g = 10;
 
  printf ("value of g = %d\n",  g);
 
  return 0;
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

value of g = 10

Parámetros formales

Los parámetros formales se tratan como variables locales dentro de una función y tienen prioridad sobre las variables globales. A continuación se muestra un ejemplo:

#include <stdio.h>
 
/* global variable declaration */
int a = 20;
 
int main () {

  /* local variable declaration in main function */
  int a = 10;
  int b = 20;
  int c = 0;

  printf ("value of a in main() = %d\n",  a);
  c = sum( a, b);
  printf ("value of c in main() = %d\n",  c);

  return 0;
}

/* function to add two integers */
int sum(int a, int b) {

   printf ("value of a in sum() = %d\n",  a);
   printf ("value of b in sum() = %d\n",  b);

   return a + b;
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

value of a in main() = 10
value of a in sum() = 10
value of b in sum() = 20
value of c in main() = 30

Inicialización de variables locales y globales

Cuando se define una variable local, el sistema no la inicializa, debe inicializarla usted mismo. El sistema inicializa automáticamente las variables globales cuando las define de la siguiente manera:

Tipo de datos Valor predeterminado inicial
En t 0
carbonizarse '\ 0'
flotador 0
doble 0
puntero NULO

Es una buena práctica de programación inicializar las variables correctamente, de lo contrario, su programa puede producir resultados inesperados, porque las variables no inicializadas tomarán algún valor basura ya disponible en su ubicación de memoria.