Vai al contenuto
Topos Uranos

Riepilogo

Questa lezione fissa il modo di lavorare che il corso seguirà fino alla fine. Descrive il ciclo di modificare, salvare, compilare, eseguire e leggere, e spiega perché conviene che l’errore venga scoperto nella fase più precoce possibile; presenta il comando di compilazione che il corso raccomanda e ciò che fa ciascuna delle sue opzioni; mostra come percorrere il ciclo dal terminale e come configurare Visual Studio Code perché compili con le stesse opzioni; insegna a distinguere nell’output del compilatore un errore da un avviso e a individuare la riga a cui si riferiscono; presenta i sanitizer, che fermano il programma quando incorre in certi comportamenti indefiniti e indicano la riga; e lascia la console pronta a mostrare gli accenti e la ñ.

Obiettivi di apprendimento

  1. Compilare un programma dal terminale con le opzioni del corso (-std=c++23 -Wall -Wextra e le altre), dare un nome all’eseguibile con -o ed eseguirlo.
  2. Configurare Visual Studio Code perché compili con le stesse opzioni del terminale e mostri gli avvisi nel suo pannello Problemi.
  3. Distinguere nell’output del compilatore un errore da un avviso, nominare l’opzione che ha prodotto ciascun avviso e individuare la riga a cui si riferisce.
  4. Attivare i sanitizer degli errori di memoria e del comportamento indefinito, e riconoscere nel loro rapporto il tipo di guasto e la riga in cui si è verificato.
  5. Diagnosticare perché un output mostra simboli strani al posto degli accenti e della ñ, e configurare l’editor e la console perché si vedano correttamente.

Il ciclo di lavoro

Scrivere un programma non è un atto unico, ma un ciclo che si ripete decine di volte in una stessa sessione. Ha cinque momenti: si modifica il codice sorgente; si salva il file, perché il compilatore legge il disco e non lo schermo dell’editor; si compila, cioè si chiede al compilatore di tradurre il file in un eseguibile; si esegue il risultato; e si legge con attenzione tutto ciò che il compilatore e il programma hanno scritto. Ciò che si è letto conduce a una nuova modifica, e il ciclo ricomincia.

L’ultimo momento è quello che si trascura di più e quello che importa di più. La premessa è semplice: un difetto costa tanto più correggerlo quanto più tardi lo si scopre. Se il compilatore lo segnala, si sa in quale riga e quasi sempre perché; se si manifesta durante l’esecuzione, si sa soltanto che qualcosa è andato storto; se si manifesta settimane dopo, con altri dati, può darsi che nessuno arrivi mai a conoscerne la causa. Ne segue che conviene scoprire i difetti il prima possibile, e che il compilatore va trattato come il primo revisore del programma: un lettore instancabile che, ben configurato, avverte di molto più che degli errori di battitura.

Questa lezione configura quel revisore su tre livelli: gli errori, che impediscono di ottenere l’eseguibile; gli avvisi del compilatore, che lo permettono, ma segnalano codice sospetto; e i sanitizer, che sorvegliano il programma mentre viene eseguito. Presuppone installati il compilatore e l’editor (lezione 1.3). Gli esempi usano variabili e istruzioni if, che saranno spiegate nelle lezioni 2.1 e 4.1; qui basta leggerli.