Costanti
Ogni linguaggio di programmazione permette di utilizzare delle costanti,
intese come la possibilità all'interno di un programma
di associare un nome (un identificatore)
ad un valore, e di utilizzare il primo al posto del secondo, in tale
programma.
Tali costanti sono estremamente utili, infatti permettono
- di evitare di scrivere più volte in un programma un'espressione
che rappresenta un numero,
per esempio quando è molto complicata, o
per garantire che non ci siano difformità tra le varie occorrenze.
- di migliorare la leggibilità dei programmi,
per esempio usare
sempre una costante per pigreco e per la base dei logaritmi naturali (e).
- di riutilizzare i programmi,
per esempio un programma che manipola
matrici quadrate di dimensione 100 può essere facilmente
riutilizzato per le matrici di dimensione 200, se tale dimensione è
rappresentata da una costante.
La forma generica di una dichiarazione di costante è
const IDENTIFIER = EXPRESSION
- IDENTIFIER
-
il nome della costante
-
EXPRESSION
- determina il valore della costante, in genere sono previste restrizioni
su tale espressione
(es. in Pascal tale espressione non deve contenere variabili)
Le costanti in C
Il C offre due modi per definire delle costanti
- Variabili read only (const)
- In C è possibile richiedere che una variabile non sia più
modificata dopo aver fissato un suo valore iniziale (e che quindi possa
essere solo letta).
La forma della dichiarazione di tali costanti è:
const TYPE IDENTIFIER = EXPRESSION
- TYPE, IDENTIFIER
-
come per le usuali dichiarazioni di variabili
-
EXPRESSION
- determina il valore della costante (deve avere tipo TYPE)
Ogni successiva assegnazione a tale variabile verrà considerato un
errore.
È possibile dichiarare queste costanti in ogni punto dove è
possibile dichiarare una variabile.
Ricorrendo alla metafora variabile = scatola, questo particolare
tipo di costanti possono essere pensate come delle scatole trasparenti che
dopo essere state inizializzate vengano sigillate, e perciò il loro
contenuto non
potrà più essere modificato.
- Costanti testuali (macro)
-
La forma della dichiarazione di questo altro tipo di costanti è:
#define IDENTIFIER TEXT
- IDENTIFIER
-
come al solito
-
TEXT
- un qualunque testo (in genere è un frammento di programma C)
Questo tipo di costanti vanno dichiarate all'inizio del file che contiene
il testo del programma.
I compilatori C prima di compilare un programma eseguono una fase di
precompilazione (preprocessing) che corrisponde ad effettuare
alcune modifiche al testo del programma medesimo.
Tali modifiche comprendono rimpiazzare ogni occorrenza di IDENTIFIER con
TEXT.
Il programma risultante viene quindi compilato.
In questo modo è possibile associare un identificatore con un valore
(il testo che lo descrive).
È importante notare
che gli eventuali errori segnalati dal compilatore si riferiscono al testo
risultante dal preprocessing e che quindi possono risultare alquanto oscuri.
Inoltre eventuali errori sintattici in TEXT non sono segnalati come
riguardanti tale dichiarazione.
ESEMPIO
Programma che legge N numeri interi e stampa il più grande.
#include <stdio.h>
#define N 100
main()
{
int max, corrente, contatore;
printf("Dammi un numero\n");
scanf("%d", &max);
contatore = 1;
while(contatore < N){
printf("Dammi un numero\n");
scanf("%d", &corrente);
contatore = contatore + 1;
if(corrente > max) max = corrente;
};
printf("il massimo numero e\' %d\n",max);
}
ESERCIZIO
-
Modificare alcuni dei programmi esempio presenti nella documentazione on
line
delle lezioni utilizzando delle costanti, e discuterne l'utilità.