----------------------------

                           The C programming's book

                                 Lessons #04

                          ----------------------------



	                          LE COSTANTI
	 			  ------------

	Cos' una costante lo dice la parola stessa. E' anch'esso una sorta
	di contenitore (come le variabili) il cui valore per (a differenza
	delle variabili) non cambia mai, rimane costante. Questo perch  il
	programma non ha un nome simbolico a cui far riferimento.
	Il primo tipo di costanti che andremo ad analizzare sono le costanti
	manifeste (o manifest costants).
	Mettiamo di voler fare un programma che calcoli l'area del  cerchio.
	come tutti sanno la formula dell'area  del  cerchio   pi greco per
	raggio alla seconda dove pi greco  un valore costante fissato a 3.14
	Pu essere conveniente utilizzare una costante per definire pi greco
	in modo da non dover riscriverlo ogni qual volte  ce n' bisogno. E' 
	possibile farlo con la direttiva #definie in questo modo:

	   #definie  PI_GRECO  3.24      /* Valore di pi greco */ 

	Quindi prima #definie poi il nome della costante e poi il suo valo-
	re. Per chiarire meglio le idee faccio altri esempi:

	   #define  NOME_PROGRAMMA  "Programmone v1.0"
	   #define  AUTHOR          "sHaDy"
	   #define  ANNO_SOLARE     365
	   #define  RETURN          0x0D	 //ritorno a capo
	   #define  VIDEO_ADDRESS   0xB8000000L //indirizzo del buffer video

	Chiaro? Fatemolta attenzione al fatto che il cancelletto "#"  deve
	trovarsi sulla prima colonna (non deve essere preceduto da niente)
	L'uso delle maiuscole non  obbligatorio ma consente di individuar-
	le meglio ed  quindi diventato uno "standard" tra i programmatori.
	Grazie alle  costanti  manifeste   anche possibile creare   delle
	formule dette macro:

	   #define    MINIMO    ((a < b) ? a : b)    
	
	In questo esempio la macro serve a trovare il minimo tra due numeri.
	Le macro per anno anche diversi effetti collaterali dovuti al fatto
	che il compilatore non esegue  controlli ma su questo   non  voglio
	dilungarmi troppo (almeno non ora). 
	Per stampare a schermo il contenuto di una variabile si procede con
	il solito printf:

	   #define PROVA "ciao"
	   #define NUMERO 333

	   printf(PROVA);      
	   printf("NUMERO");

	Senza virgolette o apici in quanto sono gi presenti nella stringa 
	associata a PROVA mentre con le virgolette per NUMERO. E' possibile
	annullare una direttiva #definie con #undef:

	   #define    PROVA    "ciao"
	   ...
   	   	printf(PROVA);
	   ...
	   #undef    PROVA  
	   ...
   	   	printf(PROVA); 
	   /*messaggio di errore in 
	   quanto PROVA non esiste pi*/

	E' anche possibile escludere dalla compilazione una parte del codice 
	con #ifdef #else e #endif nella maniera seguente:
   	  
	   #define  CIAO
	   ...
	   #ifdef    CIAO
	   ...                     //questa parte viene compilata
	   #else    
	   ...                     //questa no perch CIAO  definita
	   #endif

	associata a PROVA mentre con le virgolette per NUMERO. E' possibile
	Le costanti manifeste non sono troppo utilizzare proprio per i loro
	effetti collaterali ma soprattutto per il fatto che sono molto scomo-
	de in fase di debug: bisogna ogni volta andarle a cercare e diventa
	un bel macello.  E qui si passa al  secondo tipo  di  costanti:  le
	costanti simboliche. Queste ultime si dichiarano analogamente ad una
	variabile ma antecedendo la parola const:

	   const tipo nome_costante = valore;

	Procediamo con gli esempi:
	   
	   const int  pi_greco = 3.14;
	   const char return = 0x0D;

	Se ora proviamo a cambiare il valore alla costante appena dichiarata 
	otteniamo un messaggio di errore da parte del compilatore.
	Il principale vantaggio offerto da const  che risulta possibile acce-
	dere (in  sola  lettura) al valore   delle costanti cos  dichiarate 
	mediante l'indirizzo delle medesime (come accade per tutte le aree di 
	memoria associate a nomi simbolici).
	Infine, le costanti simboliche possono essere gestite dai debugger pro-
	prio come se fossero variabili e questo  un notevole vantaggio.


                                Written by Shady


                             robcasanovi@virgilio.it



    Source: geocities.com/it/songbook2003

               ( geocities.com/it)