"Variabili globali" sono definite allo file scope, al di fuori di qualsiasi funzione. Tutte le variabili definite nell'ambito del file e tutte le variabili dichiarate con la parola chiave static
hanno qualcosa chiamato durata di archiviazione statica. Ciò significa che saranno allocati in una parte separata della memoria ed esistono per tutta la durata del programma.
Significa anche che è garantito l'inizializzazione a zero su qualsiasi compilatore C.
Dalla corrente C11 standard C 6.7.9/10:
" ...Se un oggetto con durata di memorizzazione statica o di thread non è inizializzato in modo esplicito , quindi:
- se ha il tipo di puntatore, viene inizializzato su un puntatore nullo;
- se ha tipo aritmetico, viene inizializzato a (positivo o unsigned) pari a zero;"
In pratica, questo significa che se si inizializza la variabile globale a un dato valore, avrà quel valore e verrà assegnato in un segmento di memoria solitamente denominato .data
. Se non gli viene assegnato un valore, verrà assegnato in un altro segmento denominato .bss
. Globali non verranno mai allocati nello stack
C'è qualcosa? impedendoti di inizializzare la variabile sui valori che vuoi che siano? –