Barninga Z
a- a+

Le costanti in C

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.

 



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Luca
Ti è piaciuto l'articolo?