Skip to content

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).

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 normale
int x, y[5]; // x è intero, y è un array
// Pratica raccomandata:
char *src;
char c;
int x;
int y[5];

Lo scope determina la porzione di codice in cui un identificatore (il nome della variabile) può essere utilizzato. Il C ha principalmente:

  1. File Scope: Variabili dichiarate fuori da qualsiasi funzione. Sono visibili in tutto il file da quel punto in poi.
  2. Block Scope: Variabili dichiarate all’interno di un blocco di codice delimitato da parentesi graffe { } (come dentro un if, un for o una funzione). Esistono e sono visibili solo all’interno di quel blocco.

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.