In questa lezione dobbiamo parlare di un elemento importante nella programmazione in C, il pre-processore. Questo strano elemento ha un ruolo apparentemente trasparente, ma allo stesso tempo importantissimo. Il pre-processore è incaricato, fondamentalmente, di trovare delle direttive all'interno di un file sorgente e di eseguirle; dove sta l'arcano? che il pre-processore opera su un file sorgente e "restituisce un file sorgente" (che poi, a questo punto, viene passato al compilatore), perché le direttive che lui interpreta sono principalmente di inclusione, di definizione e condizionali.
Una direttiva inizia sempre con il carattere cancelletto # ed occupa una sola riga, su tale riga possono essere messi dei commenti ( //
o /*
) o il simbolo di continuazione alla riga successiva (\
).
Il file sorgente contenente le direttive, viene tradotto dal pre-processore in quella che viene chiamata la translation unit (anch'essa formata solamente da codice sorgente), la quale viene poi compilata in codice binario, dando origine al corrispondente file oggetto; tutti i file oggetto, infine, vengono collegati dal linker, generando un unico programma eseguibile.
Direttive di Inclusione
Le direttive di inclusione sono quelle usate maggiormente, semplicemente perché vengono usate per inserire le librerie standard del linguaggio; la forma sintattica corretta della direttiva, che peraltro conosciamo benissimo, per includere i file è la seguente,
#include <file>
mettendo il nome del file da includere tra il simbolo di minore (<) e quello di maggiore (>); in questa forma il compilatore andrà a cercare i file presenti nelle directory di include prescelta; generalmente questa directory è predefinita, ed è quella che contiene i file delle librerie standard, come ad esempio stdio.h, stdlib.h, math.h, string.h, time.h e così via.
Ma se volessimo includere un file presente, generalmente, nella stessa cartella del nostro programma, dovremmo usare una forma alternativa, come segue,
#include "file"
è possibile nidificare la direttiva #include, infatti un file incluso può contenere a sua volta questa direttiva, ma poiché il livello di nidificazione dipende spesso dal sistema, è meglio cercare di non annidare l'include degli stessi file (e per questo proporremo una soluzione più avanti).