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

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.