- Programmazione » Programmazione » Guida C - Manuale programmazione con articoli e risorse interessanti
Le costanti simboliche
LE COSTANTI
E' di recente diffusione, tra i programmatori C, la
tendenza a limitare quanto più possibile l'uso
delle costanti manifeste, in parte proprio per evitare la
possibilità di effetti collaterali, ma anche per
considerazioni relative alla logica della programmazione: le
costanti manifeste creano problemi in fase di
debugging[34], poiché non è possibile
sapere dove esse si trovino nella memoria
dell'elaboratore (come tutte le costanti, non hanno
indirizzo conoscibile); inoltre non sempre è possibile
distinguere a prima vista una costante manifesta da una
variabile, se non rintracciando la #define
(l'uso delle maiuscole e minuscole è libero tanto
nelle costanti manifeste quanto nei nomi di variabili,
pertanto nulla garantisce che un simbolo espresso interamente
con caratteri maiuscoli sia effettivamente una costante
manifesta).
Il C consente di definire delle costanti simboliche
dichiarandole come vere e proprie variabili, ma anteponendo
al dichiaratore di tipo la parola chiave const. Ecco
un paio di esempi:
const int ggAnnoFin = 360;
const char return = 0x0D;
E' facile vedere che si tratta di dichiarazioni del tutto analoghe a quelle di variabili; tuttavia la presenza di const forza il compilatore a considerare costante il valore contenuto nell'area di memoria associata al nome simbolico. Il compilatore segnala come illegale qualsiasi tentativo di modificare il valore di una costante, pertanto ogni costante dichiarata mediante const deve essere inizializzata contestualmente alla dichiarazione stessa.
const int unIntCostante = 14;
....
unIntCostante = 26; //errore: non si puo' modificare il valore di una costante
Il principale vantaggio offerto da const è
che risulta possibile accedere (in sola lettura) al valore
delle costanti così dichiarate mediante
l'indirizzo delle medesime (come accade per tutte le aree
di memoria associate a nomi simbolici): ancora una volta
rimandiamo gli approfondimenti alla trattazione dei
puntatori.
Infine, le costanti simboliche possono essere gestite dai
debugger proprio come se fossero variabili.