Le costanti, #define e const

17 marzo 2006

In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno per errore. In C++ è possibile ottenere ciò in due modi con due risultati leggermente diversi:

  • Con la direttiva al compilatore #define
  • Con il modificatore const

La direttiva #define

// Sintassi di #define
#define <identificatore> <valore>

Con la direttiva #define il compilatore in ogni punto dove incontra i simboli così definiti sostituisce ai simboli stessi i valori corrispondenti. Ad esempio, indicando:

#include <stdio.h>
#define MAXNUM 10
#define MINNUM 2

...

int x,y;
x = MAXNUM;
y = MINNUM;

automaticamente il compilatore definisce:

x = 10;
y = 2;

In seguito, se vogliamo modificare i valori in tutto il programma ci basterà modificare una volta per tutte i soli valori indicati con #define.

Nota: #define non richiede che venga messo il punto e virgola finale e neppure l’operatore di assegnamento (=).

L’utilizzo della direttiva #define non soltanto diminuisce l’occupazione di memoria (non vi è infatti necessità di spazio per le costanti MAXNUM e MINNUM), ma anche rende più veloce il programma che durante l’esecuzione, quando le deve utilizzare, non deve ricercarne i valori.

Macro

C’è da dire che #define ha un utilizzo più generale che va oltre la definizione di costanti. Essa permette anche la definizione delle macro.

Esaminiamo un esempio per capire bene in cosa consistono le macro. Si supponga che in un programma si debbano invertire molte volte i contenuti di alcuni identificatori. Piuttosto che ripetere ogni volta la stessa sequenza di operazioni, viene utile costruirsi un’istruzione apposita come dal seguente programma:

#include <stdio.h>
#define inverti (x,y,temp) (temp)=(x); (x)=(y); (y)=(temp);

main()
{
  float a= 3.0, b = 5.2, z;
  int i = 4, j = 2, k;

  inverti(a, b, z); // adesso a = 5.2 e b = 3.0
  inverti(i,j,k); // adesso i = 2 e i = 4
}

Il modificatore const

Ecco la sintassi di const:

const <identificatore> = <valore>;

Si faccia attenzione al fatto che qui viene usato sia l’operatore di assegnamento (=) che il punto e virgola finale. Se il tipo non viene indicato il compilatore assume per default che sia intero (int).

Ecco un esempio di utilizzo del modificatore const:

const int MAXNUM = 10, MINNUM = 2;
const float PIGRECO = 3.1415926;

Il compilatore assegna un valore che non può essere modificato agli identificatori utilizzati (MAXNUM e MINNUM nell’esempio), valore che però è archiviato in una zona di memoria e non sostituito in fase di compilazione, come accade per #define.

Contrariamente a #define invece, con un solo utilizzo di const è possible dichiarare più identificatori separandoli con la virgola.

Tutte le lezioni

1 ... 42 43 44 ... 66

Se vuoi aggiornamenti su Le costanti, #define e const inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Le costanti, #define e const

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy