Entendiendo las reglas de alcance en C: Variables locales, globales y formales
Un alcance en programación es una región donde una variable definida puede existir; más allá no puede accederse. En C, las variables pueden declararse en tres lugares:
Dentro de una función o bloque: variables locales.
Fuera de todas las funciones: variables globales.
En la definición de parámetros de función: parámetros formales.
Entendamos locales, globales y formales.
Variables Locales
Declaradas dentro de una función o bloque. Solo usadas por sentencias dentro de esa función/bloque. No conocidas por funciones externas. Ejemplo: a, b, c locales a main():
Demo en vivo#include <stdio.h>
int main() {
int a, b;
int c;
a = 10;
b = 20;
c = a + b;
printf("valor de a = %d, b = %d y c = %d\n", a, b, c);
return 0;
}
Variables Globales
Definidas fuera de funciones, usualmente al inicio. Mantienen valores durante toda la vida del programa y son accesibles desde cualquier función.
Una variable global puede ser accedida por cualquier función; disponible tras su declaración. Ejemplo:
Demo en vivo#include <stdio.h>
/* declaración variable global */
int g;
int main() {
int a, b;
a = 10;
b = 20;
g = a + b;
printf("valor de a = %d, b = %d y g = %d\n", a, b, g);
return 0;
}
Un programa puede tener mismo nombre para local y global; la local tiene preferencia dentro de su función:
Demo en vivo#include <stdio.h>
/* variable global */
int g = 20;
int main() {
int g = 10; /* local */
printf("valor de g = %d\n", g);
return 0;
}
Resultado:
valor de g = 10
Parámetros Formales
Tratados como variables locales dentro de una función y tienen precedencia sobre globales. Ejemplo:
Demo en vivo#include <stdio.h>
/* variable global */
int a = 20;
int main() {
int a = 10; /* local en main */
int b = 20;
int c = 0;
printf("valor de a en main() = %d\n", a);
c = sum(a, b);
printf("valor de c en main() = %d\n", c);
return 0;
}
/* función para sumar dos enteros */
int sum(int a, int b) {
printf("valor de a en sum() = %d\n", a);
printf("valor de b en sum() = %d\n", b);
return a + b;
}
Resultado:
valor de a en main() = 10 valor de a en sum() = 10 valor de b en sum() = 20 valor de c en main() = 30
Inicialización de variables locales y globales
Variable local: no inicializada por el sistema; tú debes inicializarla. Globales: inicializadas automáticamente al definirlas:
| Tipo de Dato | Valor Inicial por Defecto |
|---|---|
| int | 0 |
| char | '\0' |
| float | 0 |
| double | 0 |
| puntero | NULL |
Buena práctica: inicializar variables apropiadamente; de lo contrario, valores basura en memoria pueden dar resultados inesperados.
Lenguaje C
- Reglas Clave para Circuitos en Serie: Corriente, Resistencia y Voltaje
- Fundamentos de Circuitos en Paralelo: Reglas de Voltaje, Resistencia y Corriente
- Reglas esenciales de derivadas: Referencia rápida
- Reglas fundamentales de antiderivadas: Constantes, sumas y diferencias
- Domine variables y tipos de datos primitivos en C#: Guía completa
- Entendiendo el ámbito de variables en C#: Nivel de clase, método y bloque
- Dominando Variables, Literales y Constantes en C++: Guía Completa
- Variables, constantes y literales en C: guía completa
- Entendiendo las clases de almacenamiento en C: ámbito, vida y rendimiento
- Comprender e imprimir timescales de Verilog en cualquier alcance
- Variables y Literales en Java: Guía Completa