Skip to content

Compilazione e File di Header

Il C non trasforma il tuo codice sorgente in un eseguibile in un unico passaggio magico. Il processo di compilazione (o traduzione) attraversa diverse fasi, e una delle più importanti e peculiari del linguaggio C è il Pre-processore.

Il processo si divide in queste fasi sequenziali:

  1. Pre-processing (Pre-processore): Modifica letteralmente il testo del tuo codice sorgente, risolvendo le macro e includendo file. Genera un file temporaneo solitamente invisibile.
  2. Compilazione & Assemblaggio: Il compilatore traduce il codice C in linguaggio assembly, per poi convertirlo in codice macchina (i cosiddetti file oggetto .o).
  3. Linkage (Collegamento): Il linker unisce i tuoi file oggetto e le librerie (come la libc per stdio) risolvendo i riferimenti alle funzioni per creare l’eseguibile finale.

La direttiva #include ordina al pre-processore di prendere l’intero contenuto di un altro file e incollarlo esattamente in quel punto del file sorgente, prima di passare il tutto al compilatore. Viene usata principalmente per includere gli Header File (file con estensione .h), che contengono le dichiarazioni di funzioni, tipi personalizzati (struct, enum) e macro condivise tra più moduli.

Ci sono due modi per includere un file, che istruiscono il pre-processore su dove andare a cercarlo:

#include <stdio.h>

Usa le parentesi angolari per includere librerie di sistema o librerie standard del compilatore. Il pre-processore cercherà il file nei percorsi di sistema predefiniti configurati nel compilatore (es. /usr/include o /usr/local/include su Linux).

#include "mie_funzioni.h"

Usa le virgolette per includere gli header del tuo progetto. Il compilatore cercherà il file partendo dalla directory corrente in cui si trova il file sorgente che lo sta includendo. Se non lo trova lì, ripiegherà automaticamente a cercare nei percorsi di sistema (comportandosi come le parentesi angolari).

Verifichiamo di aver capito come includere correttamente un header. Scrivi un programma che utilizzi la funzione printf includendo l’header standard appropriato.