11/08/2000
En programación C, a menudo es necesario acceder a variables definidas en un archivo diferente o en una librería externa. Esto se logra mediante la palabra clave extern. Este artículo profundiza en el uso de extern para manejar variables globales en diferentes archivos y librerías, explicando su sintaxis, usos y posibles problemas.

La palabra clave extern
La palabra clave extern en C sirve para declarar una variable que se define en otro lugar. Esencialmente, le dice al compilador: "Sé que esta variable existe, pero su definición está en otro archivo; no la definas aquí de nuevo." Extern solo declara la variable; no reserva espacio de memoria para ella. La memoria se reserva en el archivo donde la variable se define.
Sintaxis
La sintaxis es sencilla:
extern tipo_de_dato nombre_de_variable;Donde:
tipo_de_datoes el tipo de la variable (int,float,char, etc.).nombre_de_variablees el nombre de la variable que se declara.
Ejemplos
Ejemplo 1: Variable en otro archivo
Supongamos que tenemos dos archivos: variables.cy main.c.
variables.c
#include <stdio.h>int mi_variable = 10; // Definición de la variablemain.c
#include <stdio.h>extern int mi_variable; // Declaración externa de la variableint main() { printf("El valor de mi_variable es: %d", mi_variable); return 0;}En main.c, extern int mi_variable;declara que la variable mi_variableexiste y es un entero. El compilador encontrará la definición en variables.cdurante el enlace.
Ejemplo 2: Variable en una librería
Si mi_variableestuviera en una librería (por ejemplo, mi_libreria.soo mi_libreria.lib), el proceso sería similar. Primero, se debe compilar la librería, creando el archivo .so o .lib, y después, en el programa principal, se declara externamente la variable:
#include <stdio.h>extern int mi_variable; // Declaración externa de la variable desde la libreríaint main() { printf("El valor de mi_variable es: %d", mi_variable); return 0;}En este caso, durante el proceso de enlace, el enlazador buscará la definición de mi_variabledentro de la librería.
Errores comunes
Error: "undefined reference to"
Este error surge cuando el compilador no encuentra la definición de una variable declarada con extern. Esto sucede por varias razones:
- Falta de declaración o definición: Asegúrate de que la variable esté correctamente definida en algún archivo que se incluya en el enlace.
- Problema de nombres: Verifica que el nombre de la variable en la declaración extern sea idéntico al nombre en la definición.
- Problemas de enlace: Asegúrate de que el archivo que contiene la definición de la variable esté correctamente enlazado con el archivo que la usa.
Error: Definición múltiple
Si una variable se define en más de un archivo, se producirá un error de "multiple definition of" durante el enlace. Recuerda que solo puede haber una definición de cada variable global. Extern solo declara; no define.
Mejores prácticas
- Archivos de encabezado (.h): Declara variables globales con extern en un archivo de encabezado (.h) para facilitar su uso en múltiples archivos. La definición de la variable debería estar solo en un único archivo .c.
- Nombre de variables: Utiliza nombres significativos y únicos para tus variables.
- Modularidad: Divide tu código en módulos (archivos) para mejorar la organización y la reutilización del código.
- Documentación: Documenta claramente tus variables globales y sus usos.
Tabla comparativa: Declaración vs. Definición
| Característica | Declaración (con extern ) | Definición |
|---|---|---|
| Reserva memoria | No | Sí |
| Ubicación | En cualquier archivo que necesite usar la variable | Solo en un archivo |
| Palabra clave | extern | Ninguna (o static para variables locales) |
| Propósito | Informar al compilador sobre la existencia de una variable | Crear la variable y asignarle espacio de memoria |
Consideraciones adicionales
Las variables declaradas con extern tienen alcance global. Esto significa que son accesibles desde cualquier parte del programa. El uso excesivo de variables globales puede dificultar la depuración y el mantenimiento del código. Considera alternativas como pasar variables como argumentos a las funciones o usar estructuras de datos más complejas para gestionar mejor la información.
También tener en cuenta que este mecanismo funciona adecuadamente siempre y cuando todos los archivos que compilan y enlazan para formar el ejecutable final sean compatibles en cuanto al tipo de datos y nombre de las variables. Discrepancias en este aspecto pueden ocasionar errores de compilación o comportamiento inesperado en tiempo de ejecución.
Para finalizar, dominar el uso de extern es fundamental para la programación en C, especialmente cuando se trabaja con librerías o con proyectos grandes que se dividen en varios archivos fuente. Si se utiliza correctamente, extern facilita la administración de variables globales, mejorando la modularidad y la reutilización del código. Sin embargo, es esencial recordar las precauciones necesarias para evitar errores comunes relacionados con definiciones múltiples y referencias indefinidas.
Si quieres conocer otros artículos parecidos a Cómo usar variables declaradas en otra librería en c puedes visitar la categoría Libros y Librerías.
