Sembra una domanda da fare a casa, ma morderò comunque.
Per utilizzare la x è stato definito qui in una classe o una funzione da un altro file, è necessario utilizzare
extern int x;
sopra l'uso della variabile x (come nell'intestazione), allora si può usare x solo come faresti in main(). extern dice al compilatore che stai usando una variabile che è definita/istanziata altrove.
Se si desidera che esista prima dell'esecuzione del main, si utilizza static che viene gestito prima di main() in esecuzione. In altre parole carica lo spazio di memoria con le variabili prima di avviare qualsiasi elaborazione (nel main).
Per quanto riguarda il motivo per cui è 0 all'avvio, è probabile che solo il compilatore fornisca un valore di base. Non tutti i compilatori lo fanno, a meno che non mi sbagli, molti ti daranno solo ciò che era nello spazio di memoria assegnato a x che potrebbe essere qualsiasi cosa. In altre parole ti danno la memoria completa con qualsiasi dato (o dati parziali) era in esso in anticipo.
Puoi chiarire la tua domanda su 'extern'? –
Se voglio dichiarare una variabile esterna, non è fatta allo stesso modo? – Kanishk
La differenza tra questo e un esterno è che un esterno è esterno e questo non lo è. –