In questo tutorial, verrai introdotto ai preprocessori c e imparerai a usare #include, #define e la compilazione condizionale con l'aiuto di esempi.

Il preprocessore C è un preprocessore di macro (consente di definire macro) che trasforma il programma prima che venga compilato. Queste trasformazioni possono essere l'inclusione di file di intestazione, espansioni di macro ecc.
Tutte le direttive di pre-elaborazione iniziano con un #simbolo. Per esempio,
 #define PI 3.14
Alcuni degli usi comuni del preprocessore C sono:
Compresi i file di intestazione: #include
Il #includepreprocessore viene utilizzato per includere file di intestazione nei programmi C. Per esempio,
 #include 
Ecco stdio.hun file di intestazione. La #includedirettiva del preprocessore sostituisce la riga precedente con il contenuto del stdio.hfile di intestazione.
Questo è il motivo per cui è necessario utilizzare #include prima di poter utilizzare funzioni come scanf()e printf().
È inoltre possibile creare il proprio file di intestazione contenente la dichiarazione di funzione e includerlo nel programma utilizzando questa direttiva del preprocessore.
 #include "my_header.h"
Visita questa pagina per ulteriori informazioni sull'utilizzo dei file di intestazione.
Macro che utilizzano #define
Una macro è un frammento di codice a cui viene assegnato un nome. È possibile definire una macro in C utilizzando la #definedirettiva del preprocessore.
Ecco un esempio.
 #define c 299792458 // speed of light
Qui, quando usiamo c nel nostro programma, viene sostituito con 299792458.
Esempio 1: #define preprocessore
 #include #define PI 3.1415 int main() ( float radius, area; printf("Enter the radius: "); scanf("%f", &radius); // Notice, the use of PI area = PI*radius*radius; printf("Area=%.2f",area); return 0; ) 
Funziona come le macro
Puoi anche definire macro che funzionano in modo simile come una chiamata di funzione. Questo è noto come macro di tipo funzione. Per esempio,
 #define circleArea(r) (3.1415*(r)*(r))
Ogni volta che il programma incontra circleArea(argument), viene sostituito da (3.1415*(argument)*(argument)).
Supponiamo di aver passato 5 come argomento, quindi si espande come di seguito:
 circleArea(5) expands to (3.1415*5*5)
Esempio 2: utilizzo del preprocessore #define
 #include #define PI 3.1415 #define circleArea(r) (PI*r*r) int main() ( float radius, area; printf("Enter the radius: "); scanf("%f", &radius); area = circleArea(radius); printf("Area = %.2f", area); return 0; )
Visita questa pagina per saperne di più sulle macro e sul preprocessore #define.
Compilazione condizionale
Nella programmazione C, è possibile indicare al preprocessore se includere o meno un blocco di codice. A tale scopo, è possibile utilizzare direttive condizionali.
È simile a una ifdichiarazione con una grande differenza.
L' ifistruzione viene testata durante il tempo di esecuzione per verificare se un blocco di codice deve essere eseguito o meno, mentre i condizionali vengono utilizzati per includere (o saltare) un blocco di codice nel programma prima dell'esecuzione.
Usi di condizionale
- utilizzare un codice diverso a seconda della macchina, del sistema operativo
- compilare lo stesso file sorgente in due programmi diversi
- per escludere un determinato codice dal programma ma per mantenerlo come riferimento per scopi futuri
Come si usa il condizionale?
Per utilizzare condizionale, #ifdef, #if, #defined, #elsee #elseifvengono utilizzati direttive.
Direttiva #ifdef
 #ifdef MACRO // conditional codes #endif 
Qui, i codici condizionali sono inclusi nel programma solo se è definita MACRO.
#if, #elif e #else Directive
 #if expression // conditional codes #endif 
In questo caso, expression è un'espressione di tipo intero (può essere numeri interi, caratteri, espressioni aritmetiche, macro e così via).
I codici condizionali sono inclusi nel programma solo se l'espressione viene valutata su un valore diverso da zero.
La #elsedirettiva opzionale può essere utilizzata con la #ifdirettiva.
 #if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif 
Puoi anche aggiungere condizionale annidato al tuo #if… #elseutilizzo#elif
 #if expression // conditional codes if expression is non-zero #elif expression1 // conditional codes if expression is non-zero #elif expression2 // conditional codes if expression is non-zero #else // conditional if all expressions are 0 #endif 
#defined
L'operatore speciale #defined viene utilizzato per verificare se una determinata macro è definita o meno. Viene spesso utilizzato con la direttiva #if.
 #if defined BUFFER_SIZE && BUFFER_SIZE>= 2048 // codes  
Macro predefinite
Di seguito sono riportate alcune macro predefinite nella programmazione C.
| Macro | Valore | 
|---|---|
| __DATE__ | Una stringa contenente la data corrente | 
| __FILE__ | Una stringa contenente il nome del file | 
| __LINE__ | Un numero intero che rappresenta il numero di riga corrente | 
| __STDC__ | Se segue lo standard ANSI C, il valore è un numero intero diverso da zero | 
| __TIME__ | Una stringa contenente la data corrente. | 
Esempio 3: ottieni l'ora corrente utilizzando __TIME__
Il seguente programma emette l'ora corrente utilizzando la __TIME__macro.
 #include int main() ( printf("Current time: %s",__TIME__); )
Produzione
Ora corrente: 19:54:39
Letture consigliate
- Controllo di linea
- Pragmas
- Output del preprocessore
- Altre direttive








