Variables globales

Lo que se conoce como "variable global" no es más que un identificador declarado fuera del ámbito de una función. En este vídeo te cuento cómo declarar este tipo de variables en el lenguaje de programación C, cómo usarlas en otras funciones y qué usos y riesgos hay asociados a este tipo de variables globales.

Las variables globales en C son un concepto que puede generar cierta controversia, ya que su uso puede ser tanto útil como problemático dependiendo del contexto. En esencia, una variable global es aquella que se declara fuera de cualquier función, lo que permite que sea accesible desde cualquier parte del programa. Esto contrasta con las variables locales, que solo existen dentro del ámbito delimitado por llaves, como el cuerpo de una función o un bloque condicional.

Cuando declaramos una variable dentro de una función, por ejemplo en main, esta variable solo existe durante la ejecución de esa función y dentro de su bloque. Si intentamos acceder a ella fuera de ese ámbito, el compilador nos indicará que la variable no existe. Por ejemplo, si definimos una variable x dentro de un if, solo podremos usarla dentro de ese bloque; fuera de él, no estará disponible.

En cambio, si declaramos una variable fuera de cualquier función, como int total; o float acumulado;, estas variables se convierten en globales. Esto significa que cualquier función del programa puede acceder y modificar su valor. Por ejemplo, podríamos tener una función asignar que modifique estas variables globales:

int total;
int acumulado;

void asignar() {
    acumulado = 25;
    total = 4;
}

Luego, otra función podría calcular la media usando esas variables globales:

#include <stdio.h>

float media() {
    float m = (float)acumulado / total;
    printf("La media es: %f\n", m);
    return m;
}

Al ejecutar el programa, la función media imprimiría el resultado correcto, en este caso 6.25, porque está utilizando las variables globales definidas fuera de las funciones.

Sin embargo, el uso de variables globales tiene sus riesgos. En programas pequeños puede parecer sencillo, pero en proyectos más grandes o con múltiples archivos fuente, es fácil perder la pista de dónde se modifican estas variables. Esto puede llevar a errores difíciles de detectar, ya que cualquier función puede cambiar el valor de una variable global, afectando el comportamiento de otras partes del programa sin que sea evidente.

Por esta razón, es recomendable preferir variables locales y pasar los datos necesarios como parámetros entre funciones. Esto mejora la claridad del código y facilita su mantenimiento, ya que cada función trabaja con sus propios datos o con los que explícitamente recibe.

No obstante, hay situaciones donde las variables globales son útiles. Por ejemplo, cuando varias funciones necesitan acceder a un recurso único que no puede duplicarse, como ciertos registros de hardware o zonas de memoria específicas. También la biblioteca estándar de C utiliza variables globales, como errno, que sirve para comunicar el motivo de un error en llamadas al sistema.

En resumen, aunque las variables globales pueden simplificar el acceso a datos compartidos, debemos usarlas con precaución y siempre documentarlas bien para evitar confusiones. En muchos casos, es mejor estructurar el código usando variables locales y parámetros, pero conocer cómo funcionan las variables globales y cuándo pueden ser apropiadas es fundamental para programar en C de manera efectiva.

Lista de reproducción
  1. 1
    Instalar CodeBlocks
    15 minutos
  2. 2
    Funciones y hola mundo
    17 minutos
  3. 3
    Variables y tipos de datos
    17 minutos
  4. 4
    Condicionales y operadores lógicos
    16 minutos
  5. 5
    Bucles
    11 minutos
  6. 6
    Punteros
    12 minutos
  7. 7
    Arrays
    14 minutos
  8. 8
    Estructuras
    12 minutos
  9. 9
    Otras construcciones de C
    9 minutos
  10. 10
    Memoria dinámica
    8 minutos
  11. 11
    El preprocesador (parte 1)
    10 minutos
  12. 12
    El preprocesador (parte 2)
    9 minutos
  13. 13
    Archivos de cabecera y múltiples .c (parte 1)
    8 minutos
  14. 14
    Archivos de cabecera y múltiples .c (parte 2)
    9 minutos
  15. 15
    C desde la línea de comandos (parte 1)
    8 minutos
  16. 16
    C desde la línea de comandos (parte 2)
    9 minutos
  17. 17
    Break y continue
    10 minutos
  18. 18
    Goto
    13 minutos
  19. 19
    Manipulación de bits
    15 minutos
  20. 20
    Máscaras de bit
    19 minutos
  21. 21
    Archivos (1): fopen y fclose
    13 minutos
  22. 22
    Archivos (2): leer con fgetc
    9 minutos
  23. 23
    Archivos (3): fseek y ftell
    11 minutos
  24. 24
    Archivos (4): leer con fgets
    9 minutos
  25. 25
    Archivos (5): fputc y fputs
    7 minutos
  26. 26
    Archivos (6): volcar en archivos con fwrite
    10 minutos
  27. 27
    Archivos (7): fread, fwrite y los arrays
    10 minutos
  28. 28
    Archivos (8): entrada estándar y salida estándar
    9 minutos
  29. 29
    Archivos (9): buffers
    14 minutos
  30. 30
    Archivos (y 10): otras funciones útiles con archivos
    5 minutos
  31. 31
    printf (1)
    18 minutos
  32. 32
    printf (parte 2)
    12 minutos
  33. 33
    scanf (parte 1)
    17 minutos
  34. 34
    scanf (parte 2)
    17 minutos
  35. 35
    fprintf, sprintf y snprintf
    8 minutos
  36. 36
    Tipos de datos opacos
    13 minutos
  37. 37
    Bibliotecas estáticas
    13 minutos
  38. 38
    Bibliotecas dinámicas
    15 minutos
  39. 39
    Más flags: i mayúscula (include), wall, werror, pedantic...
    12 minutos
  40. 40
    pkg-config
    12 minutos
  41. 41
    Make
    17 minutos
  42. 42
    GDB
    21 minutos
  43. 43
    Variables globales
    6 minutos
  44. 44
    extern
    9 minutos
  45. 45
    Funciones variádicas
    12 minutos
  46. 46
    El optimizador de GCC y la opción -O
    12 minutos
  47. 47
    Volatile
    6 minutos