Si utilizas variables globales dentro de un archivo en c y no las declaras externas fuera de ese archivo, es como si fueran variables privadas de una clase.
Sólo podrás verlas y manejarlas con las funciones de ese módulo (archivo) de c.
Así te aseguras que el resto del programa no las toque, sólo tu librería. Eso te dará el control que quieres sobre las variables globales.
Un saludo.
La primer sentencia a mi parecer esta mal. Declarando una variable como "global" (fuera de la funcion en el archivo .c) y no ponerle el static implica que su simbolo puede ser accedido desde otro lugar.
Es el caso que sucede si en el main.c creas la misma variable (mismo nombre y tipo) podes acceder a esta como si fuera compartido, ambos archivos acceden a la misma variable. En si, estas polucionando el espacio de simbolos.
Si queres que unicamente puedan ser accedidos desde el archivo.c concreto, usas el static (fuera de las funciones). Eso limita la visibilidad a unicamente el archivo en cuestion (aunque no probe crear otra variable con el mismo nombre, tipo y puesto como static).
-------
EDIT:
En realidad el static afectaria al "Linkage" (no se como se traduce), pero basicamente viene por el Linker quien es quien decide la posicion de las variables. Al no tener "Linkage" externo no deberia poder ser accedido desde otro lugar. O pensado de otra forma, el simbolo de esa variable unicamente pertenece a ese archivo y no es visto desde los otros.