Linguaggio C

Introduzione Al C

Che cos'è il linguaggio C, come un compilatore trasforma il sorgente in un eseguibile e come preparare VS Code e gcc per compilare il primo programma.

Primi Passi | Introduzione Al C
Competenze previste
  • 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.

AmbitoPerché il C
Sistemi operativiIl kernel Linux è scritto in C: serve accesso diretto all'hardware.
Sistemi embeddedFirmware per microcontrollori con poca memoria e poca potenza.
Interpreti e basi di datiCPython, PHP e SQLite sono scritti in C per ottenere velocità.
DidatticaRende visibili concetti che altri linguaggi nascondono: memoria, tipi, indirizzi.
Idea chiave: studiamo il C non per costruire pagine web, ma per capire come funziona davvero un programma. Chi conosce il C impara più in fretta qualunque altro linguaggio.

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.

Schema delle fasi di compilazione: sorgente, preprocessore, compilatore, assembler, linker ed eseguibile

FaseChe cosa faRisultato
1. PreprocessoreElabora le righe che iniziano con #, ad esempio #include.Sorgente espanso
2. CompilatoreControlla la sintassi e traduce in linguaggio assembly.Codice assembly
3. AssemblerConverte l'assembly in codice macchina.File oggetto (.o)
4. LinkerCollega i file oggetto alle librerie, ad esempio quella che contiene printf.Eseguibile
Per curiosità

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.

Attenzione: l'eseguibile dipende dal sistema operativo e dal processore: un programma compilato su Windows non parte su Linux. Il sorgente invece è portabile e si ricompila dove serve.

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 comandoSignificato
gccIl compilatore (GNU Compiler Collection).
-Wall -WextraAttiva molti avvertimenti (warning) su codice sospetto.
-std=c11Usa lo standard C11.
ciao.cIl file sorgente da compilare.
-o ciaoNome dell'eseguibile da creare (-o sta per output).

Verifica dei concetti

Tipo: autovalutazione   |   Argomento: Linguaggio C e compilazione

  1. Chi ha creato il linguaggio C e per quale scopo?
  2. Che differenza c'è tra codice sorgente ed eseguibile?
  3. Quali sono le quattro fasi della compilazione e che cosa produce ciascuna?
  4. Che cosa significano le opzioni -Wall, -Wextra e -o?
  5. Perché dopo ogni modifica al sorgente bisogna ricompilare?
In Sintesi
  • 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.
Cosa hai imparato
  • 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:

C Sorgente Compilatore Linker Eseguibile gcc Warning Terminale