L'inizializzazione di variabili statiche in C

L'inizializzazione di variabili statiche in C

Sì, tutti i membri vengono inizializzati per gli oggetti con archiviazione statica. Vedi 6.7.8/10 nello Standard C99 (documento PDF)

Per inizializzare tutto in un oggetto, che sia static o meno, a 0, mi piace usare l'inizializzatore zero universale

sometype identifier0 = {0};
someothertype identifier1[SOMESIZE] = {0};
anytype identifier2[SIZE1][SIZE2][SIZE3] = {0};

Non c'è inizializzazione parziale in C. Un oggetto è completamente inizializzato (in 0 del tipo corretto in assenza di un valore diverso) o non inizializzato affatto.
Se desideri un'inizializzazione parziale, non puoi iniziare con l'inizializzazione.

int a[2]; // uninitialized
int b[2] = {42}; // b[0] == 42; b[1] == 0;
a[0] = -1; // reading a[1] invokes UB

Sì, purché abbiano una durata di archiviazione statica o thread.


Sì, le variabili statiche nell'ambito del file vengono inizializzate a zero, inclusi tutti i membri di strutture, array e così via.

Vedi questa domanda come riferimento (voterò per chiudere anche questo come duplicato).

Modifica:questa domanda sta ottenendo risposte molto migliori, quindi voto per chiuderla quella domanda come duplicato di questo , invece.

Per riferimento, ecco il link C FAQ dalla risposta accettata di quella domanda, anche se ovviamente gli standard C99 e C11 qui collegati sono canonici.