Un errore va collegato alla fase in cui compare. Un compilatore assente, un sorgente non incluso, una sintassi errata e un risultato sbagliato richiedono controlli diversi. La guida parte dal messaggio concreto e dal progetto realmente attivo.
Individuare dove si interrompe il percorso

Schema esplicativo originale creato per il capitolo.
Prima di modificare il codice, leggi il comando o l’azione che ha prodotto il messaggio. Una diagnosi in Build log può provenire dal compilatore o dal linker. Una richiesta visibile nella console può semplicemente indicare un’attesa di input. Un messaggio dell’IDE può riguardare il percorso dello strumento.
| Sintomo | Fase da controllare | Primo riferimento |
|---|---|---|
| Il compilatore non è trovato | Ambiente | Toolchain executables |
| Il file sorgente non è trovato | Progetto e percorsi | File elencati nel progetto |
| Messaggio di sintassi con riga | Compilazione | Prima diagnosi e sorgente |
| undefined reference o simbolo mancante | Collegamento | Definizioni e librerie |
| La console aspetta un dato | Esecuzione | Richiesta stampata dal programma |
| Output precedente o inatteso | Target, build o logica | Esito della build ed eseguibile avviato |
Le formulazioni riportate sono esempi: i testi precisi variano con compilatore, versione e lingua. Il principio è identificare il componente che ha emesso la diagnosi.
Il compilatore non viene trovato
Se l’IDE comunica che la configurazione del compilatore è invalida o che non trova il programma, il sorgente potrebbe non essere stato letto. Controlla il pacchetto installato, la presenza della toolchain e la directory selezionata.
- Apri Settings → Compiler.
- Leggi il nome della configurazione selezionata.
- Apri Toolchain executables e controlla la directory reale.
- Controlla gli eseguibili C, C++ e di collegamento della toolchain.
- Controlla il compilatore selezionato nelle impostazioni del progetto.
- Ripeti la build e leggi il nuovo messaggio.
Un pacchetto Windows senza MinGW non diventa completo installando un plugin per colorare il sorgente. Su Linux l’assenza di GCC richiede gli strumenti della distribuzione. Su macOS un percorso riferito a un MinGW Windows è comunque incoerente.
L’IDE può raggiungere un compilatore tramite percorso assoluto anche se la shell non lo trova nel PATH. Distingui quindi «comando non trovato nel terminale» da «configurazione del progetto non valida» prima di modificare variabili di ambiente.
Il progetto non costruisce il file che stai modificando
Un file aperto nell’editor può non appartenere al progetto attivo. Un file salvato nella cartella può non essere incluso nel target. Un file rinominato sul disco può aver lasciato nel progetto un riferimento al vecchio nome.
Controlla progetto attivo, elenco dei sorgenti, percorso e inclusione nei target. Poi controlla che il documento modificato sia stato salvato. Se il log elenca un sorgente diverso da quello previsto, individua la discrepanza prima di modificare il codice.
Un progetto con due sorgenti che definiscono entrambi main può arrivare alla compilazione e fallire al collegamento. I quattro programmi scaricabili sono intenzionalmente progetti separati: non devono essere aggiunti insieme a un unico eseguibile.
Un output vecchio può anche dipendere da un’altra cartella del target. La build Debug non aggiorna automaticamente il programma della cartella Release. Leggi il percorso dell’output nei messaggi invece di aprire un file omonimo trovato altrove.
Leggere e correggere un errore di sintassi
Molte diagnosi riportano file, riga e colonna. La posizione segnalata è il punto in cui lo strumento si accorge del problema; la causa può essere nella riga precedente. In C e C++ un punto e virgola o una graffa mancanti possono produrre più segnalazioni.
Questo frammento volutamente incompleto manca del punto e virgola:
int quantita = 3
printf("%d\n", quantita);La prima dichiarazione deve terminare così:
int quantita = 3;
printf("%d\n", quantita);Leggi prima la diagnosi iniziale, poi le righe circostanti. Non aggiungere punteggiatura casualmente a ogni riga evidenziata. Dopo la correzione salva e ricostruisci per distinguere i messaggi rimasti da quelli derivati dal primo errore.
Una graffa chiude un blocco; una parentesi chiude una chiamata o un’espressione; una virgoletta chiude una stringa. I tre segni hanno ruoli differenti. L’evidenziazione dell’editor aiuta a seguirli, ma la decisione sulla validità sintattica spetta al compilatore.
Differenza tra avviso ed errore
Un avviso richiama l’attenzione su un possibile problema. Un errore può impedire la costruzione. Le impostazioni del compilatore possono promuovere alcuni avvisi a errori: il comportamento dipende dalla configurazione, non soltanto dal colore della riga nell’IDE.
Un sorgente compilato con una variabile inutilizzata può produrre un avviso pur consentendo l’eseguibile. Un riferimento a un nome non dichiarato può invece fermare la compilazione. Leggi il testo e il riepilogo della build per sapere se il target è stato prodotto.
Non silenziare tutti gli avvisi per far apparire il log pulito. Esamina la causa pertinente al programma. Allo stesso tempo una riga informativa sul file in costruzione non è un errore solo perché compare nel pannello dei messaggi.
Errori di collegamento e librerie
Il linker riunisce oggetti e riferimenti. Messaggi come undefined reference o multiple definition indicano problemi differenti da una parentesi mancante. Nel primo caso può mancare la definizione di una funzione; nel secondo possono esserci più definizioni incompatibili dello stesso simbolo.
Una dichiarazione descrive una funzione, ma non ne fornisce necessariamente il corpo. Se la definizione è in un altro sorgente, quel sorgente deve partecipare alla build. Se la definizione è in una libreria, il collegamento deve includere la libreria compatibile e la relativa ricerca.
Per C++ il comando di collegamento deve gestire anche la libreria standard C++. Usare una configurazione incoerente con i file del progetto può produrre riferimenti mancanti. Non risolvere questi problemi copiando librerie di architetture diverse in cartelle casuali.
Gli esempi iniziali usano la libreria standard e una toolchain coerente. Se falliscono al collegamento, parti dalla configurazione e dall’eventuale presenza di altri sorgenti aggiunti al progetto.
Programma in attesa, input errato e codice di uscita
Un programma fermo dopo «Inserisci una quantità» sta normalmente aspettando l’input. Fai clic nella console, digita il numero e premi Invio. Il compilatore ha già svolto il lavoro: avviare un’altra build non inserisce il dato nella sessione corrente.
Gli esempi QuantitaC e QuantitaCPP controllano un fallimento della conversione e un intervallo di quantità. Se inserisci un valore non utilizzabile possono mostrare un messaggio e terminare con codice non zero. Questo è un percorso previsto dal codice, non una mancata installazione dell’IDE.
Un codice di uscita diverso da zero va interpretato nel contesto del programma o dello strumento che lo restituisce. Il suo significato non è identico per qualsiasi applicazione. Un arresto anomalo o un errore di memoria richiedono una diagnosi diversa da un return 1 scelto per segnalare input non valido.
Una finestra console che si chiude rapidamente può aver semplicemente ospitato un programma terminato. Avvia dall’IDE o da un terminale per mantenere leggibile il risultato. Non aggiungere chiamate di sistema non portabili soltanto per mascherare il comportamento della finestra.
Risultato sbagliato senza messaggi d’errore
Un errore logico può compilare ed eseguire normalmente. Per tre articoli da dodici euro occorre moltiplicare. Se usi una somma, il programma può stampare senza protestare il valore sbagliato:
const int prezzo = 12;
const int quantita = 3;
const int totale = prezzo + quantita;Il risultato è 15, mentre il calcolo previsto richiede prezzo * quantita, che produce 36. L’IDE non conosce automaticamente il significato commerciale delle variabili. Confronta dati, operazioni e risultato atteso.
Per osservare i valori puoi usare stampe temporanee o un debugger configurato. Un breakpoint su una riga eseguibile permette di fermarsi prima di un’operazione e leggere lo stato. Gli strumenti non sostituiscono la scelta dell’operazione corretta, ma rendono visibile ciò che il programma sta facendo.
Una procedura ordinata di diagnosi
- Leggi il messaggio completo e individua chi lo ha emesso.
- Controlla progetto attivo, target e sorgente salvato.
- Controlla la toolchain effettivamente richiamata.
- Distingui compilazione, collegamento ed esecuzione.
- Correggi la prima causa identificata e salva.
- Ricostruisci e leggi il nuovo risultato prima di avviare.
- Durante l’esecuzione osserva output, richieste di input e codice di uscita.
Se cerchi documentazione, usa il testo preciso della diagnosi insieme al compilatore e alla versione. Non confondere una guida per GCC su Linux con una configurazione MSVC o con i problemi della build Mac dell’IDE. Il nome del componente rende la ricerca molto più utile di una descrizione generica come «Code::Blocks non funziona».