Il preprocessore C è un preprocessore di macro (permette di definire macro) che trasforma il tuo programma prima che sia compilato. Queste trasformazioni possono essere l’inclusione di file di intestazione, espansioni di macro ecc.
Tutte le direttive di preprocessore iniziano con un simbolo #
. Per esempio,
#define PI 3.14
Alcuni degli usi comuni del preprocessore C sono:
- Inclusione di file di intestazione: #include
- Macro usando #define
- Esempio 1: #define preprocessor
- Function like Macros
- Esempio 2: Usare #define preprocessor
- Compilazione condizionale
- Usi del condizionale
- come usare il condizionale?
- #ifdef Direttiva
- #if, #elif e #else Direttiva
- #defined
- Macro predefinite
- Esempio 3: Ottenere l’ora corrente usando __TIME__
- Letture consigliate
Inclusione di file di intestazione: #include
Il preprocessore #include
è usato per includere file di intestazione nei programmi C. Per esempio,
#include <stdio.h>
Qui, stdio.h
è un file di intestazione. La direttiva del preprocessore #include
sostituisce la linea precedente con il contenuto del file di intestazione stdio.h
.
Questa è la ragione per cui devi usare #include <stdio.h>
prima di poter usare funzioni come scanf()
e printf()
.
Puoi anche creare il tuo file di intestazione contenente la dichiarazione della funzione e includerlo nel tuo programma usando questa direttiva del preprocessore.
#include "my_header.h"
Visita questa pagina per saperne di più sull’uso dei file di intestazione.
Macro usando #define
Una macro è un frammento di codice al quale viene dato un nome. Puoi definire una macro in C usando la direttiva #define
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 preprocessor
#include <stdio.h>#define PI 3.1415int 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;}
Function like Macros
Puoi anche definire macro che lavorano in modo simile a una chiamata di funzione. Questo è conosciuto come macro simili a funzioni. 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, allora si espande come segue:
circleArea(5) expands to (3.1415*5*5)
Esempio 2: Usare #define preprocessor
#include <stdio.h>#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ù su macro e #define preprocessor.
Compilazione condizionale
Nella programmazione C, puoi indicare al preprocessore se includere o meno un blocco di codice. Per farlo, si possono usare le direttive condizionali.
E’ simile a una dichiarazione if
con una differenza importante.
La dichiarazione if
viene testata durante l’esecuzione per controllare se un blocco di codice deve essere eseguito o meno, mentre le condizionali sono usate per includere (o saltare) un blocco di codice nel programma prima dell’esecuzione.
Usi del condizionale
- utilizzare codice diverso a seconda della macchina, del sistema operativo
- compilare lo stesso file sorgente in due programmi diversi
- escludere certo codice dal programma ma tenerlo come riferimento per scopi futuri
come usare il condizionale?
Per usare il condizionale si usano le direttive #ifdef
, #if
, #defined
, #else
e #elseif
.
#ifdef Direttiva
#ifdef MACRO // conditional codes#endif
Qui, i codici condizionali sono inclusi nel programma solo se MACRO è definito.
#if, #elif e #else Direttiva
#if expression // conditional codes#endif
Qui, espressione è un’espressione di tipo intero (può essere interi, caratteri, espressione aritmetica, macro e così via).
I codici condizionali sono inclusi nel programma solo se l’espressione viene valutata con un valore diverso da zero.
La direttiva opzionale #else
può essere usata con la direttiva #if
.
#if expression conditional codes if expression is non-zero#else conditional if expression is 0#endif
Puoi anche aggiungere condizionali annidati al tuo #if...#else
usando #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 è usato per verificare se una certa macro è definita o no. È spesso usato con la direttiva #if.
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 // codes
Macro predefinite
Ecco alcune macro predefinite nella programmazione C.
Macro | Valore |
---|---|
__DATE__ |
Una stringa contenente la data corrente |
__FILE__ |
A stringa contenente il nome del file |
__LINE__ |
Un intero che rappresenta il numero di linea corrente |
__STDC__ |
Se segue lo standard ANSI C, allora il valore è un intero non nullo |
__TIME__ |
Una stringa contenente la data corrente. |
Esempio 3: Ottenere l’ora corrente usando __TIME__
Il seguente programma fornisce l’ora corrente usando la macro __TIME__
.
#include <stdio.h>int main(){ printf("Current time: %s",__TIME__); }
Output
Current time: 19:54:39
Letture consigliate
- Controllo della linea
- Pragmi
- Preprocessore di uscita
- Altre direttive