Skip to content

Direttive per il precompilatore

Le direttive sono istruzioni utilizzate per semplificare la scrittura del codice che iniziano per il carattere cancelletto # e sono seguite da parole chiave riconosciute dal precompilatore. Il precompilatore, prima dell'inizio della compilazione, esegue due passi fondamentali:

  • elimina i commenti dal codice
  • espande le direttive inserite

in questo modo in fase di compilazione comparirà solo il codice del nostro programma con le sostituzioni adeguate per le direttive inserite.

#include

La direttiva di #include permette di inserire nel codice le librerie, sia che si tratti di librerie standard, sia che si tratti di librerie definite dal programmatore. La sintassi è la seguente:

#include <nome_libreria.h>

oppure può essere anche:

#include "nome_libreria.h"

nel caso in cui il file di libreria si trovi nella stessa cartella del sorgente. La libreria più utilizzata in C è stdio che permette di accedere a tutte le funzioni che comandano l'input e l'output del programma, tipo printf e scanf_s. Si include con:

#include <stdio.h>

Esistono anche altre librerie molto utili, come ad esempio:

  • stdlib.h: per operazioni come allocazione della memoria dinamica, estrazione di numeri pseudo-casuali, conversione di interi in caratteri e viceversa e l'invio di comandi al processore;
  • math.h: per operazioni matematiche non elementari, come seno, coseno, tangente, arcoseno, arcocoseno, arcotangente, potenza, radice quadrata, approssimazione all'interno inferiore o superiore, logaritmo, esponenziale;
  • ctype.h: per la manipolazione di caratteri, come conversione al minuscolo o al maiuscolo e funzioni per il test per verificare se si tratta di un carattere alfabetico, alfanumerico, minuscolo, maiuscolo, numerico;
  • time.h: per ottenere una rappresentazione del tempo di sistema o corrente o fare la differenza tra due tempi differenti;
  • string.h: per la manipolazione di stringhe come concatenamento, comparazione, copia, estrazione della lunghezza;

Quando il precompilatore incontra una direttiva #include la sostituisce con il codice della libreria specificata per intero.

#define

Questa direttiva permette di definire le cosiddette costanti, ovvero dei simboli a cui è associato un valore che non cambia durante l'esecuzione del programma. Ad esempio, per approssimare il pi greco a 3.14 possiamo inserire una costante:

#define PI_GRECO 3.14

che poi andiamo ad utilizzare in una formula come il calcolo del permietro di una circonferenza dato il raggio:

p = 2 * PI_GRECO * r;

oppure, per dire che in un anno ci sono 365 giorni (comunemente scritti come gg) possiamo dire:

#define GG_ANNO 365

Da notare che in enrambi i casi si è usato il carattere MAIUSCOLO per distinguere le costanti dalle variabili.

Un'altro uso della #define può essere la definizione di macro, ovvero delle piccole funzioni. Ad esempio per calcolare il perimetro del quadrato dato il lato:

#define P_QUAD(lato) (lato*4)

in modo che quando dobbiamo calcolare il perimetro possiamo direttamente chiamare quella macro:

l = 4;
p = P_QUAD(l);

Il precompilatore si occuperà di sostituire nel codice il nome delle costanti che abbiamo definito con il loro valore e i nomi delle macro con le funzioni che definiscono. Anche all'interno di librerie di sistema ci possono essere costanti e/o macro già definite come il valore del pi greco che è definito con la costante M_PI nella libreria math.h.