C++: iniziare con C++ senza traumi

Questa è la prima puntata di una nuova serie, parallela a quelle che già portiamo avanti sul canale: la serie su C++. Negli ultimi tempi se ne è parlato parecchio. C’è chi dice che sia un linguaggio in via di estinzione, e secondo me non è vero per niente. C’è chi dice che sia troppo complicato, e voglio sfatare anche questo mito: la serie si chiama “senza traumi” proprio per questo. Per scrivere i programmi basta un editor qualsiasi; io uso Visual Studio Code, che è gratuito ed è comodo, ma va bene tutto. Il compilatore è g++, che su qualunque distribuzione si installa in un attimo (su Debian e derivate il pacchetto è g++, oppure build-essential).

Si parte dal classico Hello world, che però ci permette di introdurre un po’ di concetti fondamentali.

Il primo programma

Creiamo un file che chiamiamo helloworld.cpp e scriviamoci dentro questo:

#include <iostream>

int main() {
    std::cout << "Hello world" << std::endl;
    return 0;
}

Vediamo che cosa c’è dentro, riga per riga.

  • La direttiva include serve a includere le librerie. In C++ quasi tutto passa dalle librerie, esattamente come in Python e in tanti altri linguaggi. iostream è la libreria più basilare: contiene le funzioni di input e output, e ci serve per scrivere una stringa a terminale.
  • Ogni programma C++ normalmente contiene la funzione main, che è quella che viene eseguita all’avvio. Qui è dichiarata di tipo int perché restituisce un valore numerico intero.
  • std è il namespace da cui prendiamo cout, che è la destinazione dell’output del programma. Un namespace, per ora, è semplicemente un insieme di elementi: ne parleremo meglio più avanti, quindi se non è chiarissimo non preoccupatevi.
  • Con l’operatore a doppia freccia << mandiamo a cout prima la stringa e poi std::endl, che è il carattere di fine riga.
  • Ogni istruzione C++ finisce con un punto e virgola. Da ricordare subito.
  • return 0 restituisce il valore intero zero, che per convenzione vuol dire “è andato tutto bene”. Poi si chiude la graffa del main.

Compilare in quattro passi

Il programma è già completo e funzionante. C++ però è un linguaggio compilato: per ottenere un eseguibile bisogna fare una serie di operazioni. Normalmente g++ le fa tutte in un colpo solo, ma qui le facciamo una alla volta, così vediamo che cosa succede dietro le quinte.

Primo passo: il preprocessore. Le direttive che iniziano con il cancelletto, come include, vengono risolte e il loro contenuto viene copiato nel nostro sorgente. Con l’opzione -E fermiamo g++ a questo punto e scriviamo il risultato in un file, che per convenzione ha estensione .ii:

g++ -E helloworld.cpp -o helloworld.ii

Aprendo helloworld.ii troverete migliaia di righe: è tutto il contenuto di iostream, già risolto, e in fondo, dopo tutte le direttive, c’è il nostro codice.

Secondo passo: la generazione dell’assembly. Con -S (maiuscola) g++ traduce il codice preprocessato in assembly e produce un file .s:

g++ -S helloworld.ii

Terzo passo: l’assemblaggio. Con -c produciamo il file oggetto, che è binario e quindi non leggibile a occhio:

g++ -c helloworld.s -o helloworld.o

Quarto e ultimo passo: il linking. Il linker mette insieme i vari file oggetto (qui ne abbiamo uno solo) e le librerie per creare il file eseguibile vero e proprio. Con -o diciamo come chiamarlo:

g++ helloworld.o -o helloworld

Nella cartella è comparso un file helloworld, senza estensione: è l’eseguibile. Lo lanciamo come qualunque altro comando:

./helloworld

e l’output è quello che ci aspettavamo:

Hello world

In sintesi

In pratica, quando scrivete semplicemente g++ helloworld.cpp -o helloworld, g++ fa per voi tutti e quattro questi passaggi in sequenza. Averli visti uno per uno aiuta però a capire che cosa significano gli errori che vi capiteranno più avanti: un errore di preprocessore, uno di compilazione e uno di linking sono cose molto diverse.

Ora tocca a voi: installate il compilatore, scrivete il vostro Hello world e provate i quattro passi. Nelle prossime puntate della serie andremo a vedere la sintassi del linguaggio un pezzo alla volta.

Link e risorse

Sostieni il canale

PER SOSTENERE IL CANALE BASTANO UN LIKE E UN’ISCRIZIONE!
ma se vuoi offrirmi un caffè, mi aiuterà a rimanere sveglio mentre registro i video 😁☕
clicca qui per scoprire come https://buymeacoffee.com/thelinuxnerd

questi link sono affiliati Amazon, acquistando i libri che ti consiglio sostieni il canale!