31.05.2013 Views

Tricky C - Si® @lbert Site

Tricky C - Si® @lbert Site

Tricky C - Si® @lbert Site

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

42 - <strong>Tricky</strong> C<br />

fare riferimento in un'operazione di assegnazione. Una costante è un valore esplicito, che può essere<br />

assegnato ad una variabile, ma al quale non può essere mai assegnato un valore diverso da quello iniziale.<br />

Ad esempio, una costante di tipo character (carattere) è un singolo carattere racchiuso tra apici.<br />

char c1, c2 = 'A';<br />

c1 = 'b';<br />

c2 = c1;<br />

'c' = c2; //ERRORE! impossibile assegnare un valore a una costante<br />

Una costante intera con segno è un numero intero:<br />

int unIntero = 245, interoNegativo = -44;<br />

Una costante intera senza segno è un numero intero seguito dalla lettera U, maisucola o<br />

minuscola, come ci insegna il nostro CIAO2.C:<br />

unsigned int anni = 31U;<br />

Per esprimere una costante di tipo long occorre posporle la lettera L, maiuscola o minuscola 41 .<br />

long abitanti = 987553L;<br />

Omettere la L non è un reato grave... il compilatore segnala con un warning che la costante è<br />

long e procede tranquillamente. In effetti, questo è l'atteggiamento tipico del compilatore C: quando<br />

qualcosa non è chiaro tenta di risolvere da sé l'ambiguità, e si limita a segnalare al programmatore di<br />

avere incontrato qualcosa di... poco convincente. Il compilatore C "presume" che il programmatore sappia<br />

quel che sta facendo e non si immischia nelle ambiguità logiche più di quanto sia strettamente<br />

indispensabile.<br />

Una U (o u) individua una costante unsigned; le costanti unsigned long sono<br />

identificate, ovviamente, da entrambe le lettere U e L, maiuscole o minuscole, in qualsivoglia ordine. Le<br />

costanti appartenenti ai tipi integral possono essere espresse sia in notazione decimale (come in tutti gli<br />

esempi visti finora), sia in notazione esadecimale (anteponendo i caratteri 0x o 0X al valore) sia in<br />

notazione ottale (anteponendo uno 0 al valore).<br />

char beep = 07; // ottale; 7<br />

unsigned long uLong = 12UL; // decimale; 12 unsigned long<br />

unsigned maxUInt = 0xFFFFU; // esadecimale; 65535 unsigned<br />

Una costante di tipo floating point in doppia precisione (double) può essere espressa sia in<br />

notazione decimale che in notazione esponenziale: in questo caso si scrive la mantissa seguita dalla<br />

lettera E maiuscola o minuscola, a sua volta seguita dall'esponente. Per indicare che la costante è in<br />

singola precisione (float), occorre posporle la lettera F, maiuscola o minuscola. Per specificare una<br />

costante long double occorre la lettera L.<br />

float varF = 1.0F;<br />

double varD = 1.0;<br />

double varD_2 = 1.; // lo 0 dopo il punto decimale puo' essere omesso<br />

long double varLD = 1.0L; // non e' un long int! C'e' il punto decimale!<br />

double varD_3 = 2.34E-2; // 0.0234<br />

41 E' preferibile utilizzare la L maiuscola, poiché, nella lettura dei listati, quella minuscola può facilmente essere<br />

scambiata con la cifra 1.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!