Costanti

Ogni linguaggio di programmazione permette di utilizzare delle costanti, intese come la possibilità all'interno di un programma di associare un nome (un identificatore) ad un valore, e di utilizzare il primo al posto del secondo, in tale programma.

Tali costanti sono estremamente utili, infatti permettono

La forma generica di una dichiarazione di costante è

const IDENTIFIER = EXPRESSION

IDENTIFIER
il nome della costante
EXPRESSION
determina il valore della costante, in genere sono previste restrizioni su tale espressione
(es. in Pascal tale espressione non deve contenere variabili)

Le costanti in C

Il C offre due modi per definire delle costanti
Variabili read only (const)
In C è possibile richiedere che una variabile non sia più modificata dopo aver fissato un suo valore iniziale (e che quindi possa essere solo letta).
La forma della dichiarazione di tali costanti è: const TYPE IDENTIFIER = EXPRESSION
TYPE, IDENTIFIER
come per le usuali dichiarazioni di variabili
EXPRESSION
determina il valore della costante (deve avere tipo TYPE)
Ogni successiva assegnazione a tale variabile verrà considerato un errore.
È possibile dichiarare queste costanti in ogni punto dove è possibile dichiarare una variabile.

Ricorrendo alla metafora variabile = scatola, questo particolare tipo di costanti possono essere pensate come delle scatole trasparenti che dopo essere state inizializzate vengano sigillate, e perciò il loro contenuto non potrà più essere modificato.

Costanti testuali (macro)
La forma della dichiarazione di questo altro tipo di costanti è:
#define IDENTIFIER TEXT
IDENTIFIER
come al solito
TEXT
un qualunque testo (in genere è un frammento di programma C)
Questo tipo di costanti vanno dichiarate all'inizio del file che contiene il testo del programma.

I compilatori C prima di compilare un programma eseguono una fase di precompilazione (preprocessing) che corrisponde ad effettuare alcune modifiche al testo del programma medesimo.
Tali modifiche comprendono rimpiazzare ogni occorrenza di IDENTIFIER con TEXT.
Il programma risultante viene quindi compilato.
In questo modo è possibile associare un identificatore con un valore (il testo che lo descrive).

È importante notare che gli eventuali errori segnalati dal compilatore si riferiscono al testo risultante dal preprocessing e che quindi possono risultare alquanto oscuri.
Inoltre eventuali errori sintattici in TEXT non sono segnalati come riguardanti tale dichiarazione.


ESEMPIO
Programma che legge N numeri interi e stampa il più grande.
#include <stdio.h>
#define N 100

main()
{
    int max, corrente, contatore;
    
    printf("Dammi un numero\n");
    scanf("%d", &max);
    contatore = 1;
    
    while(contatore < N){
       printf("Dammi un numero\n");
       scanf("%d", &corrente);
       contatore = contatore + 1;
       if(corrente > max) max = corrente;
    };
 
    printf("il massimo numero e\' %d\n",max);
  
}

ESERCIZIO
  1. Modificare alcuni dei programmi esempio presenti nella documentazione on line delle lezioni utilizzando delle costanti, e discuterne l'utilità.