Introduzione al C++: il primo programma

Introduzione al C++: il primo programma

Il C++ è un linguaggio di programmazione compilato, fortemente tipizzato e multiparadigma, creato da Bjarne Stroustrup nei primi anni Ottanta come estensione del linguaggio C. Nasce con un obiettivo preciso: unire l'efficienza e il controllo di basso livello del C con strumenti di astrazione di alto livello, come la programmazione orientata agli oggetti e la programmazione generica. Ancora oggi è uno dei linguaggi più utilizzati per software di sistema, motori di gioco, applicazioni ad alte prestazioni, sistemi embedded e librerie scientifiche.

A differenza di linguaggi interpretati come Python o JavaScript, il codice C++ deve essere tradotto in linguaggio macchina da un compilatore prima di poter essere eseguito. Questo passaggio di compilazione consente al programma di girare direttamente sul processore, senza un interprete intermedio, garantendo prestazioni molto elevate ma richiedendo maggiore attenzione da parte di chi scrive il codice.

Il modello di compilazione

Quando si scrive un programma in C++, il file sorgente (con estensione .cpp) attraversa diverse fasi prima di diventare un eseguibile. Il preprocessore gestisce le direttive come #include, il compilatore traduce il codice in codice oggetto, e infine il linker collega i vari moduli e le librerie per produrre il file eseguibile finale. Comprendere questo flusso aiuta a interpretare correttamente gli errori che possono comparire in ciascuna fase.

Le fasi principali sono:

  • Preprocessing: vengono espanse le direttive che iniziano con il carattere #.
  • Compilazione: il codice sorgente viene tradotto in codice oggetto.
  • Linking: i moduli oggetto e le librerie vengono uniti in un unico eseguibile.

Il primo programma

Per tradizione, il primo programma che si scrive in qualsiasi linguaggio stampa un messaggio di saluto. Vediamo come appare in C++.

#include <iostream>

// Punto di ingresso del programma
int main() {
    std::cout << "Ciao, mondo!" << std::endl;
    return 0;
}

Analizziamo ogni riga. La direttiva #include <iostream> rende disponibili gli strumenti per l'input e l'output su console, in particolare l'oggetto std::cout. La funzione main è il punto di ingresso obbligatorio di ogni programma C++: l'esecuzione comincia sempre da qui. L'operatore << invia il testo all'oggetto std::cout, mentre std::endl inserisce un ritorno a capo e svuota il buffer di output. Infine, return 0 comunica al sistema operativo che il programma è terminato con successo.

Il prefisso std e gli spazi dei nomi

Il prefisso std:: indica che cout ed endl appartengono allo spazio dei nomi (namespace) della libreria standard. Gli spazi dei nomi servono a evitare conflitti tra identificatori con lo stesso nome provenienti da librerie diverse. È possibile, soprattutto in piccoli esempi, evitare di ripetere il prefisso importando l'intero spazio dei nomi, anche se nei progetti reali questa pratica è sconsigliata perché riduce la chiarezza del codice.

#include <iostream>

using namespace std;

int main() {
    // Ora non serve piu il prefisso std::
    cout << "Ciao, mondo!" << endl;
    return 0;
}

Compilazione ed esecuzione

Supponendo di aver salvato il sorgente in un file chiamato main.cpp, lo si compila da terminale con un compilatore come clang++ oppure g++. L'opzione -o permette di specificare il nome del file eseguibile prodotto, mentre -std indica lo standard del linguaggio da utilizzare.

# Compilazione con clang++ usando lo standard C++17
clang++ -std=c++17 -o main main.cpp

# Esecuzione dell'eseguibile prodotto
./main

Se tutto è corretto, sul terminale comparirà il messaggio di saluto. Da questo punto di partenza si possono esplorare gradualmente i concetti fondamentali del linguaggio: variabili, operatori, strutture di controllo, funzioni e, più avanti, la programmazione orientata agli oggetti. Nei prossimi articoli affronteremo questi argomenti uno alla volta, costruendo basi solide su cui poggiare progetti sempre più complessi.