File header e sorgente
Separi dichiarazioni e codice.
File header e sorgente è una lezione C Academy gratuita su CoddyKit. Questa è la lezione 1 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é suddividere il codice in file?
Quando i programmi C crescono, mantenere tutto in un unico file .c rende il codice difficile da leggere e rallenta la compilazione.
C consente di suddividere un progetto in più file, ognuno dedicato a un aspetto. Questo migliora l'organizzazione, permette di riutilizzare il codice e fa sì che la modifica di una parte non obblighi a ricompilare tutto.
Due tipi di file
Un progetto C modulare usa due tipi di file.
I file sorgente (.c) contengono l'implementazione effettiva: corpi delle funzioni e definizioni.
I file header (.h) contengono le dichiarazioni: prototipi di funzione, definizioni di tipi e macro che gli altri file devono conoscere.
Un file header
Un header dichiara che cosa esiste senza spiegare come funziona.
Qui math_utils.h dichiara una funzione add. Qualsiasi file che include questo header conosce la firma della funzione e può chiamarla.
/* math_utils.h */
int add(int a, int b);Il file sorgente corrispondente
Il file sorgente fornisce l'implementazione. Include il proprio header, così il compilatore può verificare che la definizione corrisponda alla dichiarazione.
Noti che l'header è incluso tra virgolette, la sintassi usata per i file del proprio progetto.
/* math_utils.c */
#include "math_utils.h"
int add(int a, int b) {
return a + b;
}Usare il modulo
Ora main.c include l'header e chiama add. Non vede mai il corpo della funzione, ma solo il prototipo.
Il compilatore si affida alla dichiarazione; in seguito il linker collega la chiamata all'implementazione reale in math_utils.c.
/* main.c */
#include <stdio.h>
#include "math_utils.h"
int main(void) {
printf("%d\n", add(2, 3));
return 0;
}Virgolette e parentesi angolari
La direttiva #include ha due forme.
#include <stdio.h> usa le parentesi angolari per gli header di sistema e della libreria standard. Il compilatore cerca nei percorsi standard degli include.
#include "math_utils.h" usa le virgolette per i propri header, che vengono cercati prima nella directory corrente.
#include <stdio.h> /* standard library */
#include "math_utils.h" /* your project */Cosa inserire in un header
Inserisca le dichiarazioni negli header, non le definizioni.
Contenuti appropriati per un header: prototipi di funzione, dichiarazioni di struct e typedef, macro #define e dichiarazioni di variabili extern.
Eviti di inserirvi corpi di funzioni o definizioni di variabili, perché ciò può causare errori di simboli duplicati.
/* shapes.h */
typedef struct {
double width;
double height;
} Rect;
double rect_area(Rect r);Cosa inserire in un file sorgente
Il file sorgente contiene il lavoro effettivo: definizioni delle funzioni e helper privati del file.
Include l'header corrispondente, così il compilatore verifica che le firme coincidano. In questo modo le incompatibilità vengono rilevate subito, invece che al momento del linking.
/* shapes.c */
#include "shapes.h"
double rect_area(Rect r) {
return r.width * r.height;
}Dichiarazione e definizione
Questa distinzione è fondamentale nella programmazione C modulare.
Una dichiarazione comunica al compilatore il tipo e la firma di un nome, così che possa essere usato: int add(int, int);
Una definizione crea l'entità effettiva, allocando memoria o fornendo il corpo. Gli header dichiarano; i file sorgente definiscono.
int add(int a, int b); /* declaration */
int add(int a, int b) { /* definition */
return a + b;
}Convenzioni per i nomi
Un modello comune associa ogni modulo in base al nome: logger.h con logger.c, parser.h con parser.c.
In questo modo è evidente dove si trova un'implementazione. Raggruppi le funzioni correlate in un unico modulo, così ogni file ha una responsabilità chiara e specifica.
/* logger.h */
void log_info(const char *msg);
void log_error(const char *msg);Il processo di compilazione
Ogni file .c viene compilato indipendentemente in un file oggetto, poi tutti gli oggetti vengono collegati in un unico programma.
Gli header non vengono compilati autonomamente: vengono inseriti testualmente nei file sorgente che li includono. Esamineremo l'intero processo di compilazione in una lezione successiva.
gcc -c main.c /* -> main.o */
gcc -c math_utils.c /* -> math_utils.o */
gcc main.o math_utils.o -o appVerifica rapida
Verifichi la Sua comprensione del ruolo degli header e dei file sorgente.
Riepilogo
Ha imparato a suddividere un progetto C in header .h e file sorgente .c.
Gli header dichiarano che cosa esiste; i file sorgente definiscono come funziona. Usi le virgolette per i propri header e le parentesi angolari per quelli standard.
Ora impediremo i problemi causati dall'inclusione dello stesso header più di una volta.
Impara C con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 39
- Lezioni
- 144
Domande Frequenti
La lezione «File header e sorgente» è gratuita?
Sì — il testo completo di «File header e sorgente» è 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 «File header e sorgente»?
Separi dichiarazioni e codice. 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 1 di 4.
Quanto tempo richiede la lezione «File header e sorgente»?
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
- File header e sorgente
- Guardie di inclusione
- extern e linkage
- Compilare più file