- Descrivere le caratteristiche del linguaggio C e i suoi ambiti di utilizzo.
- Distinguere codice sorgente, compilazione ed eseguibile.
- Elencare le fasi di compilazione: preprocessore, compilatore, assemblatore e linker.
- Preparare un ambiente di sviluppo con editor e compilatore.
- Compilare ed eseguire il primo programma da terminale.
Che cos'è il linguaggio C
Tipo: linguaggio compilato | Origine: Bell Labs, anni Settanta
Il C è un linguaggio di programmazione creato da Dennis Ritchie nei laboratori Bell all'inizio degli anni Settanta, in origine per riscrivere il sistema operativo UNIX. È un linguaggio di medio livello: permette di controllare da vicino memoria e processore, ma resta leggibile come un linguaggio evoluto.
Negli anni è stato standardizzato più volte (C89, C99, C11, C17, C23). Nel corso useremo lo standard C11, supportato da tutti i compilatori moderni.
| Ambito | Perché il C |
|---|---|
| Sistemi operativi | Il kernel Linux è scritto in C: serve accesso diretto all'hardware. |
| Sistemi embedded | Firmware per microcontrollori con poca memoria e poca potenza. |
| Interpreti e basi di dati | CPython, PHP e SQLite sono scritti in C per ottenere velocità. |
| Didattica | Rende visibili concetti che altri linguaggi nascondono: memoria, tipi, indirizzi. |
Dal sorgente all'eseguibile
Strumento: compilatore | Obiettivo: capire le fasi
Il computer non capisce il testo che scriviamo: esegue solo codice macchina. Il file scritto dal programmatore si chiama codice sorgente (estensione .c). Il compilatore lo traduce una volta per tutte in un eseguibile, che si avvia senza bisogno del sorgente. Un linguaggio interpretato, invece, traduce il codice mentre lo esegue.

| Fase | Che cosa fa | Risultato |
|---|---|---|
| 1. Preprocessore | Elabora le righe che iniziano con #, ad esempio #include. | Sorgente espanso |
| 2. Compilatore | Controlla la sintassi e traduce in linguaggio assembly. | Codice assembly |
| 3. Assembler | Converte l'assembly in codice macchina. | File oggetto (.o) |
| 4. Linker | Collega i file oggetto alle librerie, ad esempio quella che contiene printf. | Eseguibile |
Puoi fermare gcc a una fase intermedia: gcc -E ciao.c mostra l'output del preprocessore, gcc -S ciao.c genera il file assembly e gcc -c ciao.c produce il file oggetto.
Il primo programma
File: ciao.c | Comando: gcc
Il programma più semplice stampa un messaggio a video. Lo studieremo riga per riga nella prossima lezione; per ora ci serve per provare gli strumenti.
#include <stdio.h>
int main(void)
{
printf("Ciao, mondo!\n");
return 0;
}Per compilarlo si usa il comando seguente, che ripeteremo per tutto il corso:
gcc -Wall -Wextra -std=c11 ciao.c -o ciao| Parte del comando | Significato |
|---|---|
gcc | Il compilatore (GNU Compiler Collection). |
-Wall -Wextra | Attiva molti avvertimenti (warning) su codice sospetto. |
-std=c11 | Usa lo standard C11. |
ciao.c | Il file sorgente da compilare. |
-o ciao | Nome dell'eseguibile da creare (-o sta per output). |
Laboratorio guidato — Compilare il primo programma
Obiettivo: preparare l'ambiente di sviluppo, compilare ed eseguire ciao.c.
Software: VS Code, gcc, terminale. Tempo previsto: 30 minuti.
Prerequisiti: computer con permessi per installare software (o ambiente di laboratorio già configurato).
Procedura passo passo
- Installa il compilatore (se la scuola ha già un ambiente pronto passa al punto 2). Windows: installa MSYS2 ed esegui, dal terminale MSYS2 UCRT64,
pacman -S mingw-w64-ucrt-x86_64-gcc; poi aggiungiC:\msys64\ucrt64\binalla variabile PATH. macOS:xcode-select --install. Linux (Debian/Ubuntu):sudo apt install build-essential. - Apri un terminale nuovo e scrivi
gcc --version: deve comparire il numero di versione del compilatore. - Installa Visual Studio Code e, dalla scheda Estensioni, l'estensione C/C++ di Microsoft.
- Crea una cartella
corso-c, aprila con File → Apri cartella e crea un nuovo file chiamatociao.c. - Scrivi il programma mostrato sopra, carattere per carattere, e salva con
Ctrl+S. - Apri il terminale integrato (Terminale → Nuovo terminale) e compila:
gcc -Wall -Wextra -std=c11 ciao.c -o ciao. Se non compare nessun messaggio, la compilazione è riuscita. - Esegui il programma:
./ciaosu macOS e Linux,.\ciao.exein PowerShell su Windows. - Cambia il testo tra le virgolette, ricompila ed esegui di nuovo: ogni modifica al sorgente richiede una nuova compilazione.
- Aggiungi una seconda riga
printf("Sono il tuo nome\n");prima direturn 0;, ricompila ed esegui.
$ gcc -Wall -Wextra -std=c11 ciao.c -o ciao
$ ./ciao
Ciao, mondo!Il simbolo $ rappresenta il prompt del terminale e non va digitato. Una compilazione riuscita non stampa nulla.
Verifica del risultato
| Controllo | Che cosa devi riconoscere |
|---|---|
gcc --version | Mostra la versione del compilatore. |
File ciao (o ciao.exe) | Compare nella cartella dopo la compilazione. |
| Esecuzione | Stampa Ciao, mondo! e torna al prompt. |
gccnon viene riconosciuto: il compilatore non è nel PATH. Chiudi e riapri il terminale oppure controlla la variabile PATH.- Su Linux e macOS,
ciao: command not found: scrivi./ciao, con punto e barra iniziali. - Compaiono errori di compilazione: confronta il codice carattere per carattere con l'esempio, in particolare virgolette, parentesi e punto e virgola.
- Le lettere accentate appaiono strane nel terminale: è un problema di codifica della console; nei primi programmi evitale.
Esercizio autonomo
Crea un file presentazione.c che stampi su tre righe il tuo nome, la tua classe e il tuo linguaggio di programmazione preferito. Compilalo con -Wall -Wextra.
Verifica dei concetti
Tipo: autovalutazione | Argomento: Linguaggio C e compilazione
- Chi ha creato il linguaggio C e per quale scopo?
- Che differenza c'è tra codice sorgente ed eseguibile?
- Quali sono le quattro fasi della compilazione e che cosa produce ciascuna?
- Che cosa significano le opzioni
-Wall,-Wextrae-o? - Perché dopo ogni modifica al sorgente bisogna ricompilare?
- Il C è un linguaggio compilato, di medio livello, nato per scrivere UNIX.
- Il sorgente (
.c) viene tradotto in un eseguibile dal compilatore. - La compilazione comprende preprocessore, compilatore, assembler e linker.
gcc -Wall -Wextra -std=c11 file.c -o fileè il comando base del corso.
- Hai descritto le caratteristiche e gli ambiti del linguaggio C.
- Hai distinto sorgente, file oggetto ed eseguibile.
- Hai preparato un ambiente con editor e compilatore.
- Hai compilato ed eseguito il tuo primo programma.
Parole chiave
I termini principali introdotti in questa guida sono: