C/Variabili, operatori e costanti/Costanti: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Riga 7: Riga 7:
== Costanti manifeste==
== Costanti manifeste==
Le costanti manifeste si dichiarano nel seguente modo:
Le costanti manifeste si dichiarano nel seguente modo:
#define macro [sequenza_di_caratteri]
#define COSTANTE [sequenza_di_caratteri]
Ciò che si ottiene è la sostituzione nel sorgente del nome indicato con la sequenza di caratteri che lo segue. Si osservi l'esempio seguente:
Ciò che si ottiene è la sostituzione nel sorgente del nome indicato con la sequenza di caratteri che lo segue. Si osservi l'esempio seguente:
<source lang="c">
<source lang="c">

Versione delle 12:14, 6 gen 2010

Indice del libro

Esistono due tipi di costanti: le costanti manifeste e le variabili costanti.

Costanti manifeste

Le costanti manifeste si dichiarano nel seguente modo:

#define COSTANTE [sequenza_di_caratteri]

Ciò che si ottiene è la sostituzione nel sorgente del nome indicato con la sequenza di caratteri che lo segue. Si osservi l'esempio seguente:

#define SALUTO Ciao! Come stai?

In questo caso viene dichiarata la costante SALUTO in modo tale che tutte le occorrenze di questo nome, successive alla sua dichiarazione, vengano sostituite con Ciao! Come stai?. È molto importante comprendere questo particolare: tutto ciò che appare dopo il nome della macro, a parte lo spazio che lo separa, viene utilizzato nella sostituzione. Ecco un esempio:

#include <stdio.h>
#define SALUTO "Ciao! come stai?\n"
int main (void)
{
    printf (SALUTO);
    return 0;
}

In questo caso, SALUTO può essere utilizzata in un contesto in cui ci si attende una stringa letterale, perché include gli apici doppi che sono necessari per questo scopo. Nell'esempio si vede l'uso della macro-variabile come argomento della funzione printf() e l'effetto del programma è quello di mostrare il messaggio seguente:

Ciao! come stai?

È bene precisare che la sostituzione delle macro-variabili non avviene se i loro nomi appaiono tra apici doppi, ovvero all'interno di stringhe letterali. Si osservi l'esempio seguente:

#include <stdio.h>
#define SALUTO Ciao! come stai?
int main (void)
{
    printf ("SALUTO\n");
    return 0;
}

In questo caso, la funzione printf() emette effettivamente la parola SALUTO e non avviene alcuna espansione di macro:

SALUTO

Una volta compreso il meccanismo basilare della direttiva #define si può osservare che questa può essere utilizzata in modo più complesso, facendo anche riferimento ad altre macro già definite:

  1. define UNO 1
  2. define DUE UNO+UNO
  3. define TRE DUE+UNO

In presenza di una situazione come questa, utilizzando la macro TRE, si ottiene prima la sostituzione con DUE+UNO, quindi con UNO+UNO+1, infine con 1+1+1 (dopo, tocca al compilatore).

Tradizionalmente i nomi delle costanti manifeste vengono definiti utilizzando solo lettere maiuscole, in modo da poterli distinguere facilmente nel sorgente.

Come è possibile vedere meglio in seguito, è sensato anche dichiarare una macro senza alcuna corrispondenza. Nella definizione di una macro-variabile può apparire l'operatore ##, con lo scopo di attaccare ciò che si trova alle sue estremità. Si osservi l'esempio seguente:

#include <stdio.h>
#define UNITO 123 ## 456
int main (void)
{
    printf ("%d\n", UNITO);
    return 0;
}