Anoto lo siguiente para que no se me olvide y por si le es de utilidad a alguien más.
Variable global
Se inicializan solas al arrancar el programa, valor default = 0. También se pueden inicializar a lo que uno quiera.
Variable local
Su vida útil es igual a la vida de la función donde están. No se inicializan solas, hay que inicializarlas manualmente. Si se declaran como static, entonces se inicializan solas a 0 y se vuelven inmortales.
La keyword static en C tiene dos significados:
Sobre una variable local, la hace inmortal.
Sobre una variable global, la hace invisible por otros ensamblados C, sólo la puede ver el archivo C que la declara.
Para evitar que una variable global en C30 (PIC24/dsPIC) sea inicializada ante cualquier reset, se debe usar el atributo persistent.
char _PERSISTENT error; //una variable inmortal ante resets
Si no se declara así, el reset la renueva y pierde su contenido.
De donde saqué todo esto:
http://www.careertechonline.com/c-language/visibility-lifetime-global-variables-c-language/