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

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Etichetta: Editor wikitesto 2017
 
Riga 9:
#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:
<sourcesyntaxhighlight lang="c">
#define SALVE Ciao, Come stai?
</syntaxhighlight>
</source>
In questo caso viene dichiarata la costante SALVE 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:
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
#define SALVE "Ciao! Come stai?\n"
Riga 20:
printf (SALVE);
}
</syntaxhighlight>
</source>
In questo caso, SALVE 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:
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
#define SALVE Ciao! come stai?
Riga 31:
printf ("SALVE\n");
}
</syntaxhighlight>
</source>
In questo caso, la funzione printf() emette effettivamente la parola SALVE e non avviene alcuna espansione di macro:
SALVE
Riga 46:
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:
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
#define UNIONE 123 ## 456
Riga 53:
printf ("%d\n", UNIONE);
}
</syntaxhighlight>
</source>
 
== Costanti simboliche ==
In pratica si tratta di variabili a cui si applica il modificatore ''const''. Ovviamente, è obbligatorio inizializzarla contestualmente alla sua dichiarazione. L'esempio seguente dichiara la costante simbolica ''e'', il numero di Nepero:
<sourcesyntaxhighlight lang="c">
const float e = 2.71828183;
</syntaxhighlight>
</source>
Le costanti simboliche di questo tipo, sono delle variabili per le quali il compilatore non concede che avvengano delle modifiche; pertanto, il programma eseguibile che si ottiene, potrebbe essere organizzato in modo tale da caricare questi dati in segmenti di memoria a cui viene lasciato poi il solo permesso di lettura.
[[Categoria:C|Costanti]]