Qualificatori di Tipo
Tutti i tipi esaminati finora sono detti “unqualified” (non qualificati). Puoi alterare il comportamento del compilatore verso una variabile usando i qualificatori di tipo.
1. const
Section titled “1. const”Un oggetto dichiarato const non può essere modificato dopo essere stato inizializzato (è di sola lettura). Il compilatore potrebbe anche posizionarlo fisicamente in una porzione di memoria protetta del sistema operativo.
const int limite = 100;limite = 200; // ERRORE DI COMPILAZIONE: variabile in sola letturaTentare di modificare un valore const aggirando le regole (ad esempio usando in modo forzato i puntatori) risulta in un Undefined Behavior.
2. volatile
Section titled “2. volatile”Questo qualificatore dice al compilatore: “Attenzione, il valore di questa variabile può cambiare in qualsiasi momento senza che il programma esegua alcuna riga di codice”.
3. restrict
Section titled “3. restrict”Introdotto nel C99 per i puntatori, dice al compilatore: “Prometto che l’oggetto a cui punta questo puntatore non sarà modificato o letto da nessun altro puntatore all’interno di questo blocco”. Sapendo questo, il compilatore è libero di applicare ottimizzazioni molto spinte (aliasing optimization). Se menti e usi un altro puntatore per alterare quella memoria, causerai Undefined Behavior.
💻 Esercizio Pratico: Const Correctness
Section titled “💻 Esercizio Pratico: Const Correctness”Il codice di seguito non compila (o non dovrebbe!) perché tenta di alterare dati protetti. Correggilo in modo che rispetti le restrizioni del qualificatore const.