Barninga Z
a- a+

Le variabili: dichiarare le var in C

Le variabili 

 

E' il momento di ripescare CIAO.C e complicarloun poco. 

#includevoid main(void);void main(void){    unsigned int anni;    float numero;    anni = 31;    numero = 15.66;    printf("Ciao Ciao! Io ho %u anni" ,anni);    printf("e questo è un float: %f" ,numero);}

 

Nella nuova versione, CIAO2.C abbiamo introdottoqualcosa di molto importante: l'uso delle variabili. Il Cconsente di individuare una certa area di memoria mediante unnome arbitrario che le viene attribuito con un'operazionedetta definizione della variabile; la variabile èovviamente l'area di RAM così identificata. Ogniriferimento al nome della variabile è in realtàun riferimento al valore in essa contenuto; si noti, inoltre,che nella definizione della variabile viene specificato iltipo di dato associato a quel nome (e dunque contenuto nellavariabile). In tal modo il programmatore può gestire idati in RAM senza conoscerne la posizione e senzapreoccuparsi (entro certi limiti) della loro dimensione inbit e dell'organizzazione interna dei bit, cioèdel significato che ciascuno di essi assume nell'area dimemoria assegnata alla variabile. 

Con la riga 

unsigned int anni;

viene definita una variabile di nome anni e di tipo unsignedinteger (intero senza segno): essa occupa perciò unaword nella memoria dell'elaboratore e può assumerevalori da 0 a 65535. Va osservato che allavariabile non è associato, per il momento, alcunvalore: essa viene inizializzata con la riga 

anni = 31;

che costituisce un'operazione di assegnazione: il valore31 è assegnato alla variabile anni;l'operatore "=" , in C, èutilizzato solo per le assegnazioni (che sono sempreeffettuate da destra a sinistra), in quanto per il controllodi una condizione di uguaglianza si utilizza un operatoreapposito ("=="). 

Tuttavia è possibile inizializzare una variabilecontestualmente alla sua dichiarazione: 

   

unsigned int anni = 31;

 

è, in C, un costrutto valido. 

Nella definizione di variabili di tipo integral, la parolaint può essere sempre omessa, eccetto il casoin cui sia "sola": 

unsigned anni = 31;     // OK! sinonimo di unsigned intlong abitanti;    // OK! sinonimo di long intvalore;     // ERRORE! il solo nome della variabile NON basta!

Dal momento che ci siamo, anche se non c'entra nulla conle variabili, tanto vale chiarire che le due barre"//" introducono un commento, come sideduce dalle dichiarazioni appena viste. Viene consideratocommento tutto ciò che segue le due barre, fino altermine della riga. Si possono avere anche commentimultiriga, aperti da "/*" e chiusi da"*/". Ad esempio: 

/* abbiamo esaminato alcuni esempi   di dichiarazioni di variabili */

Tutto il testo che fa parte di un commento viene ignorato dalcompilatore e non influisce sulle dimensioni del programmaeseguibile; perciò è bene inserire con unacerta generosità commenti chiarificatori nei proprisorgenti. Non è infrequente che un listato,"dimenticato" per qualche tempo, risulti didifficile lettura anche all'autore, soprattutto se questinon ha seguito la regola... KISS, già menzionata. Icommenti tra "/*" e"*/" non possono essere nidificati,cioè non si può fare qualcosa come: 

/* abbiamo esaminato alcuni esempi   /* alcuni validi e altri no */   di dichiarazioni di variabili */

Il compilatore segnalerebbe strani errori, in quanto ilcommento è chiuso dal primo "*/"incontrato. 

Tornando all'argomento del paragrafo, va ancoraprecisato che in una riga logica possono essere definite (e,volendo, inizializzate) più variabili, purchétutte dello stesso tipo, separandone i nomi con unavirgola: 

int var1, var2;// due variabili int, nessuna delle quali inizializzata    char ch1 = 'A', ch2; // due variabili char, di cui solo la prima inizializ.5    float num,  // dichiarazione di 3 float ripartita su 3    v1,   // righe fisiche; solo l'ultima variabile    terzaVar = 12.4;  // e' inizializzata

Soffermiamoci un istante sulla dichiarazione dei 3float: la suddivisione in più righe nonè obbligatoria, ed ha esclusivamente finalitàdi chiarezza (dove avremmo sistemato i commenti?). Inoltre, equesto è utile sottolinearlo, l'inizializzazioneha effetto esclusivamente sull'ultima variabiledichiarata, terzaVar. Un errore commessofrequentemente dai principianti (e dai distratti) èassegnare un valore ad una sola delle variabili dichiarate,nella convinzione che esso venga assegnato anche a tuttequelle dichiarate "prima". Ebbene, non ècosì. Ogni variabile deve essere inizializzataesplicitamente, altrimenti essa contiene... già... checosa? Cosa contiene una variabile non inizializzata? Aiparagrafi successivi l'ardua sentenza... per il momento,provate a pensarci su. 

Inoltre, attenzione alle maiuscole. La variabileterzaVar deve essere sempre indicata con la"V" maiuscola: 

int terzavar;  //OK!    char TerzaVar; //OK!    double terzaVar;     //ERRORE! terzaVar esiste gia'!

 

Non è possibile dichiarare più variabili con lostesso nome in una medesima funzione (ma in funzioni diversesì). A rendere differente il nome è sufficienteuna diversa disposizione di maiuscole e minuscole. 

I nomi delle variabili devono cominciare con una letteradell'alfabeto o con l'underscore("_") e possono contenere numeri, letteree underscore. La loro lunghezza massima varia a seconda delcompilatore; le implementazioni commerciali piùdiffuse  ammettono nomi composti di oltre32caratteri. 

double _numVar;    int Variabile_Intera_1;    char 1_carattere; //ERRORE! il nome inizia con un numero

Anche il void type può essere incontrato nelledichiarazioni: esso può però essere utilizzatosolo per dichiarare funzioni o puntatori, ma non comunivariabili; la parola chiave da utilizzare nelle dichiarazioniè void

Per riassumere, ecco l'elenco dei tipi di dato e delleparole chiave da utilizzare per dichiarare levariabili. 

TIPI DI DATO E DICHIARATORI 

 

TIPO
DICHIARATORI VALIDI
character char
unsigned character unsigned char 
short integer short int, short 
unsigned short integer unsigned short int, unsigned short 
integer int
unsigned integer unsigned int, unsigned 
long integer long int, long 
unsigned long integer unsigned long int, unsigned long 
floating point float 
double precision floating point double 
long double precision floating point long double 
void type void

Un'ultima osservazione: avete notato che nelle stringhepassate a printf() sono comparsi strani simboli("%u" , "%f")? Sitratta di formattatori di campo e indicano aprintf() come interpretare (e quindi visualizzare)le variabili elencate dopo la stringa stessa. La sequenza"%u" indica un intero senza segno, mentre"%f" indica un dato di tipofloat. Un intero con segno si indica con"%d" , una stringa con"%s" , un carattere con"%c". 

Dalle pagine che precedono appare chiaro che la dimensionedell'area di memoria assegnata dal compilatore ad unavariabile dipende dall'ingombro in byte del tipo di datodichiarato. In molti casi può tornare utile saperequanti byte sono allocati (cioè assegnati) ad unavariabile, o a un tipo di dato. Allo scopo è possibileservirsi dell'operatore sizeof(), che restituisce comeint il numero di byte occupato dal tipo di dato odalla variabile indicati tra le parentesi. 



Ti potrebbe interessare anche

commenta la notizia