Barninga Z
a- a+

Le costanti in C

Le costanti 

Le costanti, in senso lato, sono dati che il programma nonpuò modificare. Una costante è, ad esempio, lasequenza di caratteri "Ciao Ciao! " vistain precedenza: per la precisione, si tratta di una costantestringa. Essa non può essere modificata perchénon le è associato alcun nome simbolico a cui fareriferimento in un'operazione di assegnazione. Unacostante è un valore esplicito, che può essereassegnato ad una variabile, ma al quale non può esseremai 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 numerointero: 

int unIntero = 245, interoNegativo = -44;

Una costante intera senza segno è un numero interoseguito dalla lettera U, maisucola o minuscola, comeci insegna il nostro CIAO2.C

unsigned int anni = 31U;

Per esprimere una costante di tipo long occorreposporle la lettera L,  maiuscola ominuscola[28]. 

long abitanti = 987553L;

Omettere la L non è un reato grave... ilcompilatore segnala con un warning che la costante èlong e procede tranquillamente. In effetti, questoè l'atteggiamento tipico del compilatore C: quandoqualcosa non è chiaro tenta di risolvere da sél'ambiguità, e si limita a segnalare alprogrammatore di avere incontrato qualcosa di... pococonvincente. Il compilatore C "presume" che ilprogrammatore sappia quel che sta facendo e non si immischianelle ambiguità logiche più di quanto siastrettamente indispensabile. 

Una U (o u) individua una costanteunsigned; le costanti unsigned long sonoidentificate, ovviamente, da entrambe le lettere U eL, maiuscole o minuscole, in qualsivoglia ordine. Lecostanti appartenenti ai tipi integral possono essereespresse sia in notazione decimale (come in tutti gli esempivisti finora), sia in notazione esadecimale (anteponendo icaratteri 0x o 0X al valore) sia innotazione ottale (anteponendo uno 0 alvalore). 

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 notazionedecimale che in notazione esponenziale: in questo caso siscrive la mantissa seguita dalla lettera E maiuscolao minuscola, a sua volta seguita dall'esponente. Perindicare che la costante è in singola precisione(float), occorre posporle la lettera F,maiuscola o minuscola. Per specificare una costante longdouble 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 ammettel'utilizzo di costanti stringa (seppure con qualchelimite, di cui si dirà): esse sono sequenze dicaratteri racchiuse tra virgolette, come si è visto inpiù occasioni. Quanti byte occupa una stringa? Ilnumero dei caratteri che la compongono... più uno. Ineffetti le stringhe sono sempre chiuse da un byte aventevalore  zero binario[29], detto terminatore di stringa.Il NULL finale è generato automaticamente dalcompilatore, non deve essere specificatoesplicitamente. 

Attenzione: le sequenze di caratteri particolari, come"" , sono considerate un solo carattere (edoccupano un solo byte). I caratteri che non rientrano traquelli presenti sulla tastiera possono essere rappresentaticon una backslash (barra inversa) seguita da una"x" e dal codice ASCII esadecimale a duecifre del carattere stesso. Ad esempio, la stringa"x07x0Dx0A" contiene un "beep"(il carattere ASCII 7) e un ritorno a capo (i caratteri ASCII13 e 10, questi ultimi equivalenti alla  sequenza ANSI" "[30]. 

I codici ASCII possono essere utilizzati anche per esprimereun singolo carattere: 

char beep = 'x07';

E' del tutto equivalente assegnare ad una variabile charun valore decimale, ottale o esadecimale o, ancora, il valoreespresso con x tra apici. Attenzione, però:la rappresentazione ASCII di un carattere è cosa bendiversa dal suo valore ASCII; 7, 07,0x07 e 'x07' sono tra loroequivalenti, ma diversi da '7'

La differenza tra un singolo carattere rispetto ad unastringa di un solo carattere sta negli apici, chesostistuiscono le virgolette. Inoltre, 'x07'occupa un solo byte, mentre "x07" neoccupa due, uno per il carattere ASCII 7 e uno per ilNULL che chiude ogni stringa. 

Non esistono costanti di tipo void.

 



Ti potrebbe interessare anche

commenta la notizia