El caso es, no compilar varios ejecutables separados, sino varios ficheros objeto separados.
Con extern, puedes acceder a una variable de un archivo desde otros.
Para un ejemplo práctico, prueba:
http://stackoverflow.com/questions/1433204/how-do-i-use-extern-to-share-variables-between-source-files-in-cEs interesante usarla para proyectos grandes, donde uses un set de variables globales en varias partesdel proyecto. De todos modos, yo prefiero no usar extern demasiado, y pasar los datos importantes como argumentos a funciones, guardando así una coherencia en el código.