Sé que las variables globales en C a veces tienen el extern
palabra clave. Que es un extern
¿variable? ¿Cómo es la declaración? ¿Cuál es su alcance?
Esto está relacionado con compartir variables entre archivos de origen, pero ¿cómo funciona exactamente? donde uso extern
?

Luciano
declare | define | initialize |
----------------------------------
extern int a; yes no no
-------------
int a = 2019; yes yes yes
-------------
int a; yes yes no
-------------
La declaración no asignará memoria (la variable debe definirse para la asignación de memoria), pero la definición sí lo hará. Esta es solo otra vista simple de la palabra clave externa, ya que las otras respuestas son realmente geniales.

Juan Weiss
Un extern
variable es una declaración (gracias a sbi por la corrección) de una variable que está definida en otra unidad de traducción. Eso significa que el almacenamiento de la variable se asigna en otro archivo.
Di que tienes dos .c
-archivos test1.c
y test2.c
. Si define una variable global int test1_var;
en test1.c
y le gustaría acceder a esta variable en test2.c
tienes que usar extern int test1_var;
en test2.c
.
Muestra completa:
$ cat test1.c
int test1_var = 5;
$ cat test2.c
#include <stdio.h>
extern int test1_var;
int main(void) {
printf("test1_var = %d\n", test1_var);
return 0;
}
$ gcc test1.c test2.c -o test
$ ./test
test1_var = 5
Extern es la palabra clave que usa para declarar que la variable en sí reside en otra unidad de traducción.
Entonces, puede decidir usar una variable en una unidad de traducción y luego acceder a ella desde otra, luego en la segunda la declara como externa y el enlazador resolverá el símbolo.
Si no lo declara como externo, obtendrá 2 variables con el mismo nombre pero sin ninguna relación, y un error de múltiples definiciones de la variable.

Comunidad
Agregar un extern
convierte una variable definición en una variable declaración. Consulte este hilo sobre cuál es la diferencia entre una declaración y una definición.