- Programmazione » Programmazione » Guida C - Manuale programmazione con articoli e risorse interessanti
Le costanti
Le costanti, in senso lato, sono dati che il programma non
può modificare. Una costante è, ad esempio, la
sequenza di caratteri "Ciao Ciao! " vista
in precedenza: per la precisione, si tratta di una costante
stringa. Essa non può essere modificata perché
non le è associato alcun nome simbolico a cui fare
riferimento in un'operazione di assegnazione. Una
costante è un valore esplicito, che può essere
assegnato ad una variabile, ma al quale non può essere
mai assegnato un valore diverso da quello iniziale.
Ad esempio, una costante di tipo character (carattere)
è un singolo carattere racchiuso tra apici.
char c1, c2 = 'A';
c1 = 'b';
c2 = c1;
'c' = c2; //ERRORE! impossibile assegnare un valore a una costante
Una costante intera con segno è un numero intero:
int unIntero = 245, interoNegativo = -44;
Una costante intera senza segno è un numero intero seguito dalla lettera U, maisucola o minuscola, come ci insegna il nostro CIAO2.C:
unsigned int anni = 31U;
Per esprimere una costante di tipo long occorre posporle la lettera L, maiuscola o minuscola[28].
long abitanti = 987553L;
Omettere la L non è un reato grave... il
compilatore segnala con un warning che la costante è
long e procede tranquillamente. In effetti, questo
è l'atteggiamento tipico del compilatore C: quando
qualcosa non è chiaro tenta di risolvere da sé
l'ambiguità, e si limita a segnalare al
programmatore di avere incontrato qualcosa di... poco
convincente. Il compilatore C "presume" che il
programmatore sappia quel che sta facendo e non si immischia
nelle ambiguità logiche più di quanto sia
strettamente indispensabile.
Una U (o u) individua una costante
unsigned; le costanti unsigned long sono
identificate, ovviamente, da entrambe le lettere U e
L, maiuscole o minuscole, in qualsivoglia ordine. Le
costanti appartenenti ai tipi integral possono essere
espresse sia in notazione decimale (come in tutti gli esempi
visti finora), sia in notazione esadecimale (anteponendo i
caratteri 0x o 0X al valore) sia in
notazione ottale (anteponendo uno 0 al
valore).
char beep = 07; // ottale; 7
unsigned long uLong = 12UL; // decimale; 12 unsigned long
unsigned maxUInt = 0xFFFFU; // esadecimale; 65535 unsigned
Una costante di tipo floating point in doppia precisione (double) può essere espressa sia in notazione decimale che in notazione esponenziale: in questo caso si scrive la mantissa seguita dalla lettera E maiuscola o minuscola, a sua volta seguita dall'esponente. Per indicare che la costante è in singola precisione (float), occorre posporle la lettera F, maiuscola o minuscola. Per specificare una costante long double occorre la lettera L.
float varF = 1.0F;
double varD = 1.0;
double varD_2 = 1.; // lo 0 dopo il punto decimale puo' essere omesso
long double varLD = 1.0L; // non e' un long int! C'e' il punto decimale!
double varD_3 = 2.34E-2; // 0.0234
Dagli esempi si deduce immediatamente che la virgola è
espressa, secondo la convenzione anglosassone, con il punto
(".").
Il C non riconosce le stringhe come tipo di dato, ma ammette
l'utilizzo di costanti stringa (seppure con qualche
limite, di cui si dirà): esse sono sequenze di
caratteri racchiuse tra virgolette, come si è visto in
più occasioni. Quanti byte occupa una stringa? Il
numero dei caratteri che la compongono... più uno. In
effetti le stringhe sono sempre chiuse da un byte avente
valore zero binario[29], detto terminatore di stringa.
Il NULL finale è generato automaticamente dal
compilatore, non deve essere specificato
esplicitamente.
Attenzione: le sequenze di caratteri particolari, come
"" , sono considerate un solo carattere (ed
occupano un solo byte). I caratteri che non rientrano tra
quelli presenti sulla tastiera possono essere rappresentati
con una backslash (barra inversa) seguita da una
"x" e dal codice ASCII esadecimale a due
cifre del carattere stesso. Ad esempio, la stringa
"x07x0Dx0A" contiene un "beep"
(il carattere ASCII 7) e un ritorno a capo (i caratteri ASCII
13 e 10, questi ultimi equivalenti alla sequenza ANSI
" "[30].
I codici ASCII possono essere utilizzati anche per esprimere
un singolo carattere:
char beep = 'x07';
E' del tutto equivalente assegnare ad una variabile char
un valore decimale, ottale o esadecimale o, ancora, il valore
espresso con x tra apici. Attenzione, però:
la rappresentazione ASCII di un carattere è cosa ben
diversa dal suo valore ASCII; 7, 07,
0x07 e 'x07' sono tra loro
equivalenti, ma diversi da '7'.
La differenza tra un singolo carattere rispetto ad una
stringa di un solo carattere sta negli apici, che
sostistuiscono le virgolette. Inoltre, 'x07'
occupa un solo byte, mentre "x07" ne
occupa due, uno per il carattere ASCII 7 e uno per il
NULL che chiude ogni stringa.
Non esistono costanti di tipo void.