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 #include
preprocessore viene utilizzato per includere file di intestazione nei programmi C. Per esempio,
#include
Ecco stdio.h
un file di intestazione. La #include
direttiva del preprocessore sostituisce la riga precedente con il contenuto del stdio.h
file 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 #define
direttiva 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 if
dichiarazione con una grande differenza.
L' if
istruzione 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
, #else
e #elseif
vengono 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 #else
direttiva opzionale può essere utilizzata con la #if
direttiva.
#if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif
Puoi anche aggiungere condizionale annidato al tuo #if… #else
utilizzo#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