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
- il video su YouTube
- esempi e comandi della puntata su GitHub
- Get started, isocpp.org — il sito ufficiale dello standard C++
- La funzione main, cppreference — il punto di ingresso
- iostream, cppreference — la libreria di input e output
- C++, Wikipedia — in italiano
- LearnCpp — un corso completo gratuito, in inglese
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!
