Guida Linguaggio C: Le Costanti, i Tipi, le Variabili
18 Novembre 2007 C






Introduzione

Un identificatore è un nome che viene associato a diverse entità come costanti, tipi, variabili, funzioni, ecc. e serve ad identificare la particolare entità. L'identificatore sarà poi sostituito dall'indirizzo della variabile o della costante o della funzione.
Gli identificatori in C devono soddisfare determinati vincoli. Un identificatore deve iniziare con un carattere o con il simbolo '_' (underline), e può contenere solo lettere, numeri e il simbolo underline.

Esempio

  1. int a, _a, a2; // identificatore corretto
  2.  
  3. char 2b; //identificatore non corretto
  4.  

Le Costanti

Una costante è un identificatore a cui è associato un valore che resterà fisso per tutta la durata dell'esecuzione del programma. A differenza di una variabile, il cui valore può variare più volte durante l'esecuzione del programma la costante mantiene inalterato il suo valore.
Vi sono due modi per dichiarare una costante: utilizzare la const o utilizzare la direttiva al preprocessore DEFINE. Nel primo caso si associa all'identificatore il valore, la costante viene vista come una variabile con un valore fisso, nel secondo caso il compilatore andrà a sostituire, in fase di compilazione, a tutte le occorrenze dell'identificatore il valore associato.
In sostanza, definendo una costante tramite la const il compilatore farà sì (inserirà del codice) che in fase di esecuzione vi sarà una locazione di memoria relativa alla costante in cui sarà presente il valore associato alla costante. Definendo una costante tramite la DEFINE il compilatore sostituirà a tutte le occorrenze dell'identificatore il valore associato, in questo modo non vi sarà alcuna locazione di memoria associata alla costante ed il valore sarà inserito direttamente all'interno del codice.
La definizione di costante, tramite la const, avrà la seguente forma

  1. const tipo id = valore;

dopo la parola chiave const si indicherà il tipo della costante, l'identificatore e quindi il valore.

Esempio

Alcuni esempi di dichiarazioni di costanti sono le seguenti

  1. const int a = 1;
  2. const char b = 'a';
  3.  
  4. const char[] c = "Stringa";
  5. const char[] d = ('S', 't', 'r', 'i', 'n', 'g', 'a');
  6.  
  7. const int e[] = {1, 2, 3};
  8. const int e2[3] = {1, 2, 3};
  9. const int e3[3] = {1, 2};
  10.  
  11. const int f[][2] = {{1, 2}, {3, 4}, {5, 6}};
  12. const int f2[3][2] = {{1, 2}, {3, 4}, {5, 6}};
  13.  
  14. const int g = 23; //numero 23 in decimale
  15. const int h = 027; //numero 23 in ottale
  16. const int i = 0x17; //numero 23 in esadecimale
  17.  
  18. const float k = 23.47;
  19. const float l = 2.347e1;

Le prime due dichiarazioni di costanti sono banali dichiarazioni di un intero e di un carattere. Da notare come un carattere viene indicato tra apice singolo ('a').
Particolarmente interessante è vedere come viene dichiarato un array di caratteri. In C il tipo stringa non esiste, a differenza del C++, quindi le stringhe vengono gestite tramite gli array di caratteri.
Una costante stringa può essere dichiarata in due modi, come indicato in riga 4, indicando la stringa per esteso racchiusa tra doppi apici, oppure come in riga 5, carattere per carattere ciascuno racchiuso tra apici singolo. Nel primo caso il compilatore di assegnare correttamente il valore alla costante.
Da notare inoltre che in quelle dichiarazioni non si è inserita la dimensione dell'array. Non è necessario, sarà sempre il compilatore a sistemare le cose.
Un array di costanti può essere dichiarato in due modi, specificando, come in riga 8, o non specificando, come in riga 7, la dimensione dell'array. Tutti gli elementi dell'array sono racchiusi tra parentesi graffe e ciascun elemento è separato da una virgola.
Tutti gli elementi non specificati nella definizione di array di costanti intere, come in riga 9, sono automaticamente fissati a 0. Nell'esempio in riga 9 l'array e3 sarà costituito dai seguenti elementi: 1 e 2, specificati, e 0, non specificato.
Una matrice di costanti può essere dichiarata specificando, come in riga 11, o non specificando, come in riga 10, la dimensione dell'array esterno. Tutti gli elementi dell'array sono racchiusi tra parentesi graffe e ciascun elemento è separato da una virgola. In questo caso ciascun elemento è a sua volta un array, quindi l'elemento sarà costituito da elementi racchiusi tra parentesi graffe e separati dalle virgole.
Un numero intero può essere espresso in decimale, binario, ottale ed esadecimale. Un numero con lo 0 come prima cifra è interpretato come un numero espresso in base ottale, un numero con il prefisso "0x" o "0X" è interpretato come un numero espresso in base esadecimale, un numero con
Un costante reale può essere definita in due modi, usando solo la parte intera e la parte frazionaria, come in riga 18, o usando la notazione esponenziale, come in riga 19.

La definizione di costante, tramite la DEFINE, avrà la seguente forma

  1. #DEFINE id valore;

dopo la direttiva DEFINE si indicherà l'identificatore della costante e quindi il valore.

Esempio

  1. #DEFINE a 12;
  2.  
  3. #DEFINE b 'z';
  4.  
  5. #DEFINE c "Stringa";
  6.  
  7. #DEFINE d 45.234;











Guida Linguaggio C