Variabili, Scope e Ciclo di Vita
In C, un oggetto è una regione di memoria che può rappresentare dei valori. Una variabile è un esempio di oggetto a cui abbiamo assegnato un identificatore (un nome) e un tipo (che dice al compilatore come interpretare i bit in quella memoria).
Dichiarazione di Variabili
Section titled “Dichiarazione di Variabili”Quando dichiari una variabile, le assegni un tipo e un nome. Puoi anche dichiarare più variabili sulla stessa riga, ma è considerata una pratica migliore separarle per renderle più leggibili, specialmente quando si usano i puntatori:
// Pratica sconsigliata:char *src, c; // src è un puntatore, c è un carattere normaleint x, y[5]; // x è intero, y è un array
// Pratica raccomandata:char *src;char c;int x;int y[5];Lo Scope (Visibilità)
Section titled “Lo Scope (Visibilità)”Lo scope determina la porzione di codice in cui un identificatore (il nome della variabile) può essere utilizzato. Il C ha principalmente:
- File Scope: Variabili dichiarate fuori da qualsiasi funzione. Sono visibili in tutto il file da quel punto in poi.
- Block Scope: Variabili dichiarate all’interno di un blocco di codice delimitato da parentesi graffe
{ }(come dentro unif, unforo una funzione). Esistono e sono visibili solo all’interno di quel blocco.
Storage Duration (Ciclo di Vita)
Section titled “Storage Duration (Ciclo di Vita)”Se lo scope riguarda la “visibilità” del nome, lo storage duration riguarda il tempo in cui l’oggetto esiste fisicamente in memoria (lifetime).
- Automatica: Le variabili locali (block scope) nascono quando si entra nel blocco (spesso allocate sullo Stack) e vengono distrutte quando si esce.
- Statica: Usando la parola chiave
static(o dichiarandole a livello di file scope), la variabile viene creata all’avvio del programma e mantiene il suo valore tra una chiamata e l’altra della funzione.
void incrementa(void) { // Questa variabile nasce una volta sola e ricorda il suo valore static unsigned int counter = 0; counter++; printf("%d ", counter);}💻 Esercizio Pratico: Variable Shadowing
Section titled “💻 Esercizio Pratico: Variable Shadowing”Modifica il codice per risolvere il problema dell’hiding, facendo in modo che la variabile x esterna venga modificata correttamente al posto di dichiararne una nuova.