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 di Compilazione
Section titled “Il Processo di Compilazione”Il processo si divide in queste fasi sequenziali:
- Pre-processing (Pre-processore): Modifica letteralmente il testo del tuo codice sorgente, risolvendo le macro e includendo file. Genera un file temporaneo solitamente invisibile.
- Compilazione & Assemblaggio: Il compilatore traduce il codice C in linguaggio assembly, per poi convertirlo in codice macchina (i cosiddetti file oggetto
.o). - Linkage (Collegamento): Il linker unisce i tuoi file oggetto e le librerie (come la
libcperstdio) risolvendo i riferimenti alle funzioni per creare l’eseguibile finale.
File Inclusion: La direttiva #include
Section titled “File Inclusion: La direttiva #include”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:
1. Parentesi Angolari < >
Section titled “1. Parentesi Angolari < >”#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).
2. Virgolette " "
Section titled “2. Virgolette " "”#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).
💻 Esercizio Pratico
Section titled “💻 Esercizio Pratico”Verifichiamo di aver capito come includere correttamente un header. Scrivi un programma che utilizzi la funzione printf includendo l’header standard appropriato.