Un piccolo sfondo:
Come altri hanno sottolineato, variabili statiche sono hanno collegamento interno, il che significa che essi possono essere utilizzati solo nella stessa "unità di compilazione" o sorgente. Ciò significa che non è possibile dichiararlo in un file di intestazione, assegnare un valore ad esso in una unità di compilazione e aspettarsi che quel valore appaia in un altro.
Quando si inizializza una variabile globale (statica o meno), il compilatore inserisce semplicemente il valore iniziale nel file eseguibile nella posizione di memoria allocata per la variabile. In altre parole, ha sempre un valore iniziale. Ovviamente è sempre possibile sovrascrivere il valore utilizzando una dichiarazione di assegnazione.
Suggerimenti:
Se davvero non si conosce il valore della variabile a tempo di compilazione, allora si dovrebbe assegnare dinamicamente nella funzione di inizializzazione.
static some_type some_variable; /* = 0 by default */
/* some code */
void MyInitializations()
{
some_variable = some_value;
}
Se si vuole dichiarare la variabile in un unico luogo, diciamo un file di intestazione, e definirlo in un file di origine, quindi si dovrebbe utilizzare una dichiarazione di 'extern', che dice al compilatore di non preoccuparsi di dove il la variabile è. Il linker troverà la posizione della variabile molto simile a come trova una funzione in un altro file e inserisce l'indirizzo.
Intestazione:
extern some_type some_variable;
File sorgente 1:
void UseSomeVariable()
{
x = some_variable;
}
file di Fonte 2:
some_type some_variable = some_value;
/* possible also uses some_variable */
Se si desidera solo per dichiarare la variabile in un unico luogo e definirlo in un altro, non usare la parola chiave 'statica'. Lo svantaggio di questo è che non è possibile utilizzare la stessa variabile globale in diverse unità di compilazione (file .c) e non è possibile utilizzarlo in un file di intestazione.
statico significa che è stato caricato in fase di compilazione. Perché non vuoi inizializzarlo? – Woot4Moo
Woot4Moo: Fare una variabile globale 'statica' in C significa che non è visibile al di fuori dell'attuale "unità di compilazione", di solito un file .c e tutti i suoi header. Tutte le variabili globali che non sono "esternamente" sono allocate nello spazio in fase di compilazione. – Anton