La palabra reservada de C extern se utiliza cuando usamos librerías y multiples archivos que la utilizan, en general proyectos grandes.
Es importante diferenciar dos palabras claves: - Definición: El compilador reserva memoria para almacenar la variable - Declaración: El compilador es informado de que la variable existe, y que tipo de dato es (Pero no reserva memoria para almacenarla)
Ahora supongamos que tenemos una librería con cabecera llamada: mi_libreria.h y dentro tiene una variable declarada como extern:
#####mi_libreria.h
...
extern int is_cool;
...
y tenemos un archivo principal main.c
#####main.c#####
#include "mi_libreria.h"
int is_cool;
int main() {
is_cool = 1;
}
...
Y por último tenemos un tercer archivo con funciones que tambien utiliza la librería
#####funciones.c#####
#include "mi_libreria.h"
void una_funcion() {
...
if (is_cool) puts("He is cool");
...
}
Tenemos 3 archivos. main.c, funciones.c y mi_libreria.h. tanto main.c como funciones.c usan dicha librería.
En la librería declaramos la variable is_cool
.
En main.c definimos la variable is_cool
.
Al definirla, el compilador comprueba que el tipo de dato que estamos definiendo sea el mismo que el declarado en la librería.
Ahora la variable is_cool
es una variable global (pero muy global, por que es la misma en diferentes archivos)
####Reglas Generales####
- Un extern solo se utiliza en archivos header (o de cabecera). Nunca en un archivo fuente (.c)
- Definir una variable extern solo en un archivo fuente. Solo hace falta definirla una vez.
Eso es todo lo que tengo que decir sobre extern en C.