Progetti su più file
Header e unità di traduzione
Progetti su più file è una lezione C Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C Academy include 4 lezioni in totale.
Perché dividere i file
I programmi reali non vivono in un unico file .c. Dividere il codice in più file:
- Raggruppa le funzioni correlate
- Permette al compilatore di ricompilare solo ciò che è cambiato
- Rende il codice riutilizzabile tra più progetti
- Permette al team di lavorare senza conflitti continui
Capire come vengono collegati i vari elementi è essenziale.
Unità di traduzione
Ogni file .c, dopo che il preprocessore ha espanso le sue inclusioni #include, diventa un'unità di traduzione.
Il compilatore trasforma ogni unità di traduzione indipendentemente in un file oggetto (.o). In questa fase non conosce gli altri file.
Dichiarazione e definizione
Una dichiarazione comunica al compilatore che una funzione esiste e ne specifica la firma. Una definizione fornisce il corpo effettivo.
Agli altri file basta la dichiarazione per chiamare una funzione. La definizione risiede in un unico punto.
int add(int a, int b); /* declaration: a promise */
int add(int a, int b) { /* definition: the body */
return a + b;
}Il file header
Le dichiarazioni vengono inserite in un header (.h). Qualsiasi file che vuole usare la funzione include l'header.
L'header è l'interfaccia pubblica; il file .c corrispondente è l'implementazione privata.
/* math_utils.h */
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
int mul(int a, int b);
#endifIl file di implementazione
Il file .c include il proprio header e definisce le funzioni.
Includere il proprio header permette al compilatore di verificare che le definizioni corrispondano alle dichiarazioni.
/* math_utils.c */
#include "math_utils.h"
int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }Usare il modulo
Un altro file include l'header e chiama le funzioni. Non ha mai bisogno di vedere i corpi delle funzioni.
Il compilatore si affida alle dichiarazioni; in seguito il linker collegherà le chiamate alle definizioni effettive.
/* main.c */
#include <stdio.h>
#include "math_utils.h"
int main(void) {
printf("%d\n", add(2, 3));
return 0;
}Compilazione e linking
Due fasi. Prima compili ogni file in un file oggetto con -c. Poi colleghi gli oggetti in un unico eseguibile.
Il linker risolve ogni chiamata a add trovandone la definizione in math_utils.o.
gcc -c main.c # -> main.o
gcc -c math_utils.c # -> math_utils.o
gcc main.o math_utils.o -o appVirgolette e parentesi angolari
La sintassi di inclusione controlla il percorso di ricerca:
#include "math_utils.h"cerca prima nella directory del progetto#include <stdio.h>cerca solo nei percorsi di inclusione del sistema
Usi le virgolette per i propri header e le parentesi angolari per la libreria standard.
La parola chiave extern
Per condividere una variabile globale tra più file, la definisca una volta in un file .c e la dichiari con extern nell'header.
extern indica che 'questa variabile esiste altrove', evitando definizioni duplicate.
/* in config.h */
extern int g_verbose; /* declaration */
/* in config.c */
int g_verbose = 0; /* the single definition */La parola chiave static
A livello di file, static rende una funzione o una variabile privata della propria unità di traduzione.
Un helper statico non può essere collegato dagli altri file, evitando conflitti tra nomi e nascondendo i dettagli di implementazione. In C è il modo per indicare che un elemento è interno.
/* visible only inside this .c file */
static int helper(int x) {
return x * 2;
}La regola della definizione unica
Una funzione non statica o una variabile globale può essere definita esattamente una volta nell'intero programma. La si dichiari in molti file, ma la si definisca in uno solo.
Due definizioni di add producono un errore del linker come multiple definition of 'add'. Per questo i corpi delle funzioni non vengono inseriti negli header.
Verifica rapida
Ragioni su ciò che deve appartenere a un header.
Riepilogo
Ora è possibile strutturare un progetto composto da più file:
- Ogni
.cè un'unità di traduzione compilata indipendentemente in un file.o - Gli header contengono le dichiarazioni; un file
.ccontiene ogni definizione - Il linker risolve le chiamate tra i file oggetto
externcondivide le variabili globali;staticmantiene privati i simboli locali al file
Prossimo argomento: automatizzare la compilazione con i Makefile.
Domande Frequenti
La lezione «Progetti su più file» è gratuita?
Sì — il testo completo di «Progetti su più file» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C Academy, passa a CoddyKit PRO. Il corso C Academy include 4 lezioni in totale.
Cosa imparerò in «Progetti su più file»?
Header e unità di traduzione Eserciti C Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C Academy?
Non è richiesta alcuna esperienza precedente. C Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Progetti su più file»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C Academy?
Sì. Ogni lezione C Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Compilazione condizionale
- Progetti su più file
- Makefile
- Librerie statiche e condivise