C Academy · Lezione

File header e sorgente

Separi dichiarazioni e codice.

Lezione 1 di 413 passaggi

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 app

Verifica 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.

Gratis per iniziare

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

  1. File header e sorgente
  2. Guardie di inclusione
  3. extern e linkage
  4. Compilare più file
← Torna a C Academy