← Programmazione
C++ · Introduzione

Introduzione al C++

Perché C++, come funziona il ciclo di sviluppo, la struttura minima di un programma e gli strumenti per scrivere codice.

🎓 3° anno ITIS/SIA 🔨 Primo passo del percorso ⏰ ~25 min
#include <iostream> int main () { cout << "Hello!" ; }

Perché C++?

Il C++ è un linguaggio compilato: il codice che scrivi viene tradotto in istruzioni macchina prima dell'esecuzione, senza intermediari. Questo lo rende veloce ed efficiente, adatto a sistemi operativi, videogiochi, software embedded e applicazioni dove le prestazioni contano.

È anche un linguaggio fortemente tipizzato: ogni variabile ha un tipo dichiarato esplicitamente, e il compilatore segnala subito gli errori di tipo. Questo apparente vincolo è in realtà un aiuto: molti bug vengono eliminati prima ancora di eseguire il programma.

Infine, il C++ è vicino all'hardware: permette di gestire la memoria direttamente, capire come i dati sono rappresentati in byte e ragionare su indirizzi e puntatori. È per questo che è il linguaggio di riferimento per chi studia informatica a livello tecnico.

📌 C o C++? Il C++ è un'estensione del C: aggiunge funzionalità come i namespace, il sovraccarico degli operatori e la programmazione orientata agli oggetti, mantenendo piena compatibilità con il codice C. Nella didattica scolastica si usa C++ anche quando si affronta solo la parte procedurale — è la scelta più comune nei libri di testo ITIS.

Dal sorgente all'eseguibile

Scrivere un programma in C++ richiede tre passaggi distinti. È fondamentale capirli perché gli errori che incontrerai appartengono a fasi diverse e si risolvono in modo diverso.

📄
hello.cpp
Codice sorgente
scritto da te
⚙️
Compilatore
g++ traduce
in linguaggio macchina
▶️
hello.exe
Eseguibile binario
pronto per girare
💡 Tre tipi di errori, tre fasi diverse Errori di compilazione — il compilatore non riesce a tradurre il codice (sintassi errata, tipo sbagliato). Il programma non viene creato.

Errori di collegamento (linker) — il codice è sintatticamente corretto ma mancano pezzi (funzione dichiarata ma non definita).

Errori di runtime — il programma gira ma si comporta in modo errato o va in crash (divisione per zero, accesso fuori dai limiti di un array).

Compilazione da terminale

Tutti gli ambienti di sviluppo usano internamente un compilatore. Il più comune è g++, parte del pacchetto GCC. Da terminale:

Terminale
# compila hello.cpp e produce l'eseguibile "hello"
g++ hello.cpp -o hello

# esegui il programma
./hello           # Linux / macOS
hello.exe         # Windows

Nei laboratori scolastici questo passaggio è di solito gestito dall'IDE con un tasto “Run” o “Esegui” — ma sotto al tasto c'è sempre g++ (o un compilatore equivalente) che gira.

Gestione I/O

Ogni programma utile legge dati in ingresso e produce risultati in uscita. In C++ questo avviene tramite gli stream: cout per l'output a schermo e cin per l'input da tastiera, entrambi definiti in <iostream>.

C++ · hello.cpp
#include <iostream>   // include la libreria standard di I/O: senza questa, cout non esiste
using namespace std;   // evita di scrivere "std::cout" ogni volta: basta "cout"

int main() {            // PUNTO DI INGRESSO del programma: l'esecuzione inizia sempre qui
    cout << "Hello, World!" << endl;  // stampa a schermo + vai a capo
    return 0;            // restituisce 0 al sistema operativo: 0 = tutto ok
}                       // chiude il blocco main

I tre elementi fissi di ogni programma C++

📌 Struttura minima invariabile 1. Le direttive #include — in cima al file, indicano al compilatore quali librerie usare. <iostream> per I/O, <string> per le stringhe, <fstream> per i file.

2. using namespace std; — permette di usare i nomi standard (cout, cin, string...) senza il prefisso std::. Non è obbligatorio ma è quasi universale in ambito didattico.

3. int main() — funzione obbligatoria e unica: il programma parte da qui e termina quando questa funzione restituisce. return 0 segnala al sistema operativo che l'esecuzione è terminata senza errori.

Output — cout

Il primo esempio classico: stampare un messaggio a schermo. Ogni riga di questo snippet è commentata perché la struttura che vedi qui si ripete in ogni programma C++ che scriverai.

C++ · output
cout << "Testo";            // stampa testo, cursore rimane sulla stessa riga
cout << "Testo" << endl;  // stampa testo + vai a capo (endl = end line)
cout << "Testo\n";         // equivalente: \n è il carattere di fine riga

// concatenazione con <<
cout << "Nome: " << "Mario" << " Rossi" << endl;

cin — leggere l'input da tastiera

cin legge ciò che l'utente digita. L'operatore >> è il contrario di <<: invece di mandare dati allo schermo, li preleva dalla tastiera e li mette in una variabile.

C++ · saluto.cpp
#include <iostream>
#include <string>    // necessario per usare il tipo string
using namespace std;

int main() {
    string nome;                     // dichiaro una variabile di tipo string
    cout << "Come ti chiami? ";     // chiedo l'input (senza endl: cursore rimane in riga)
    cin  >> nome;                    // leggo la risposta e la salvo in nome
    cout << "Ciao, " << nome << "!" << endl;  // uso la variabile
    return 0;
}
⚠ cin >> si ferma allo spazio Se l'utente digita Mario Rossi, cin >> nome legge solo Mario — si ferma al primo spazio. Per leggere una riga intera (nome e cognome) si usa getline():
C++ · saluto_completo.cpp
#include <iostream>
#include <string>
using namespace std;

int main() {
    string nomeCompleto;
    cout << "Nome e cognome: ";
    getline(cin, nomeCompleto);      // legge l'intera riga inclusi gli spazi
    cout << "Benvenuto, " << nomeCompleto << "!" << endl;
    return 0;
}

Ambienti di sviluppo

Puoi scrivere C++ con qualsiasi editor di testo, ma un ambiente di sviluppo (IDE) integra in un'unica interfaccia i tre strumenti fondamentali:

La scelta dell'IDE non cambia il linguaggio: il C++ che scrivi è lo stesso ovunque.

Dev-C++
Desktop
Leggero e immediato. Storico nelle scuole italiane, avvio rapido senza configurazione.
Visual Studio
Desktop
Debugger professionale e IntelliSense avanzato. Ideale quando si vuole capire in dettaglio il comportamento del codice.
Visual Studio Code
Desktop
Leggero e cross-platform. Con l'estensione C/C++ di Microsoft diventa un ambiente completo.
Code::Blocks
Desktop
Open source, semplice e stabile. Buona alternativa a Dev-C++ con interfaccia più moderna.
OnlineGDB
Browser
Zero installazione. Scrivi, compila ed esegui direttamente nel browser. Ideale per i primi programmi.
Replit
Browser
Collaborativo e condivisibile. Permette di lavorare insieme sullo stesso codice in tempo reale.

Errori comuni del primo giorno

I primi errori di compilazione che si incontrano sono quasi sempre gli stessi. Riconoscerli subito fa risparmiare molto tempo.

❌ Punto e virgola mancante
cout << "Hello" return 0;
Ogni istruzione termina con ; — il compilatore segnala l'errore sulla riga successiva, non su quella mancante.
✓ Corretto
cout << "Hello"; return 0;
Il ; termina l'istruzione. Senza, il compilatore considera le due righe un'unica istruzione incompleta.
❌ Case sensitivity
Cout << "Hello"; Int x = 5;
Il C++ distingue maiuscole e minuscole. Cout non esiste: è cout. Int non esiste: è int.
✓ Corretto
cout << "Hello"; int x = 5;
Tutto minuscolo per parole chiave e identificatori standard. Solo i nomi che scegli tu possono avere maiuscole.
❌ #include mancante
// nessun #include int main() { cout << "Hello"; }
cout è definito in <iostream>. Senza l'include il compilatore non sa cos'è cout.
✓ Corretto
#include <iostream> using namespace std; int main() { cout << "Hello"; }
Le direttive #include vanno sempre all'inizio del file, prima di tutto il resto.
💡 Come leggere un messaggio di errore del compilatore

Il formato tipico è:   nomefile.cpp: riga:colonna: error: descrizione.
Leggi sempre il primo errore della lista — spesso gli errori successivi sono conseguenze di quello iniziale e spariscono non appena lo risolvi.