Dependiendo del contexto, el término puede adquirir dos significados diferentes.
La declaración externa no es traducida por el compilador sino por el enlazador, con ello extern es un mecanismo válido para instalar modularidad a nivel del compilador.
Para ello tiene que haber una implementación de la variable marcada como extern en otro sitio (normalmente en el archivo header).
Sin embargo, si se declara una variable local con el mismo nombre, las referencias al nombre acceden a la célula de la variable local.
Para utilizar la misma variable en el archivo 2, tiene que ser declarada usando el keyword extern.