Introduzione al C++

Questo mini corso vuole essere un compendio di brevi concetti e raccolta di esempi ed esercizi per meglio comprendere l’uso di questo linguaggio di programmazione che, seppur apparentemente obsoleto agli occhi degli studenti, rimane il linguaggio più istruttivo e allo stesso tempo performante per moltissime applicazioni da riga di comando e con interfaccia grafica.

Cosa ci occorre

Per essere operativi ci serve un editor di testo come il blocco note e un compilatore come il GCC. Da riga di comando potremmo procedere a compilare il nostro file di testo col codice scritto e renderlo eseguibile con un file .EXE. Soluzione un po’ ostica, ecco perché in qualsiasi corso vengono suggeriti degli IDE, ovvero dei software che aiutano lo sviluppatore in ogni operazione necessaria, dalla scrittura semplificata del codice con il completamento automatico, l’indentazione e l’evidenziazione della sintassi, per arrivare alla compilazione, linking ed esecuzione del codice. Ce ne sono svariati di questi IDE. Da sempre nelle scuole viene suggerito il famoso DEV C++, ma ammetto di essere alquanto ostile a questa diffusa pratica, poiché si tratta di un software ideato per funzionare solo su Windows e non è neanche aggiornato molto spesso (mentre scriviamo questo articolo, l’ultimo update è del 2016 ma si tratta di un fork dell’originale della azienda la Bloodshed Software che si è fermata ben prima nel 2015 con i rilasci!). Se proprio vogliamo un IDE un po’ più agile e soprattutto che possiamo installare su Windows, Linux e Mac, possiamo pensare a Code::Block, leggermente più aggiornato anche con i sistemi operativi recenti. Da sempre mi ha creato meno problemi di dipendenze e software aggiuntivi in fase di installazione. In realtà, potremmo tranquillamente fare a meno di installare software sul nostro pc per scrivere codice C++. Esistono, infatti, online svariati siti che ci permettono di scrivere codice, compilarlo ed eseguirlo senza troppe preoccupazioni. Vi consiglio di dare uno sguardo a tutorialspoint.com. o repl.it. Essendo online, con un account verificato/registrazione, potete tenere i vostri sviluppi direttamente online in modo da poterli scrivere a scuola e rivederli a casa senza portare pene usb in giro.

Versioni del C++

Sembra una considerazione banale ma vale la pena spendere due parole sulle versioni di questo linguaggio. Come tutti i software, anche i linguaggi hanno delle versioni, rilasciate magari con periodicità su più anni ma con funzionalità differenti. Nel nostro caso, l’ultima versione è C++11, con numerose novità rispetto alla versione nel 2003 sulla programmazione parallela ed alcune caratteristiche dei linguaggi come Python con le tuple e librerie esterne aggiuntive. Nel nostro caso, vedendo degli argomenti semplici e piuttosto standard, non andiamo a toccare queste novità, quindi possiamo tranquillamente disinteressarci alla versione che utilizziamo.

Questo potrebbe essere il nostro template per le esercitazioni che svolgeremo. Magari tenetelo sempre a portata di mano in un file di testo o impostatelo come default nel vostro IDE preferito.

#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

int main()
{


  getchar();
  return 0;
}

Come leggere questo frammento di codice? In alto gli include permettono di importare nel nostro codice delle librerie esterne standard per la gestione dell’input/output da tastiera, l’uso delle stringhe e una libreria con una serie di funzioni standard (ad esempio useremo una funzionalità per creare numeri casuali più avanti). Servono sempre quelle scritte? Teoricamente la prima si, altrimenti non visualizzeremmo neanche i risultati a video. Le altre due non sono sempre necessarie, ma tanto vale tenerle come buona abitudine per i software più complessi. La scritta using… è invece una sorta di dichiarazione dell’ambiente che stiamo usando, nel nostro caso lo standard. Nei software più complessi potrebbero esserci più spazi ma nel nostro caso assumiamo come scontata questa dichiarazione. Se non la scrivo, cosa accade? Dipende dal compilatore, qualcuno può dar noia su cin e cout ad esempio. Il programma principale poi lo scriviamo all’interno della nostra funzione main. In fondo mettiamo sempre per abitudine return 0 poiché la funzione main ritorna un intero. Buona prassi, per non far chiudere subito la finestrella dos di esecuzione mettere il comando getchar() che semplicemente attende un input di qualsiasi tasto della tastiera. Alcuni manuali usano la scritta system(“PAUSE”), ma  la trovo sconveniente. La chiamata system esce dal nostro software e va ad eseguire un comando, pause appunto, sul nostro sistema operativo, facendo tutta una serie di passaggi farraginosi e lenti che non spieghiamo qui. Soprattutto, il comando pause non esiste in tutti i sistemi operativi. Questo significa che un software che compiliamo su Windows magari funziona, ma lo stesso banale software compilato su Android o Mac ci darebbe un disastroso errore. La funzione getchar, assume la stessa finalità ma è standard del C, quindi vale per ogni s.o. e in più è più corta da scrivere!

Indenta il codice

Altro dettaglio: abituiamoci a scrivere il codice indentato e leggibile. In realtà infatti, potremmo scrivere il codice precedente tutto su una riga piuttosto che scriverlo con spazi fantasia tra le varie parole. Il compilatore  funzionerebbe lo stesso, ma il nostro cervello faticherebbe a leggerlo o rileggerlo magari più avanti per ripasso. Usate il pulsate TAB, quello a sinistra con le due freccioline -> <- per allineare il codice. Le parentesi graffe sono pure importanti per suddividere blocchi di codice. Usiamole sempre allineate e/o inseriamo dei commenti di fianco per indicare cosa si sta chiudendo.

Salva, compila debug

La prima cosa che deve affrontare l’alunno è l’abitudine, troppo spesso sottovalutata, di salvare il codice che si scrive. Gli IDE sono a loro volta dei software e possono crashare compromettendo i nostri codici che sarebbero da riscrivere. Salvate, salvate spesso: è gratis!

Quando si è  alle prime armi, è facile incartarsi o non ricordarsi come scrivere e cosa scrivere, sbagliare una lettera di un linguaggio che comunque è inglese, sbadatamente mancare segni di punteggiatura, parentesi, scrivere un nome di variabile per un altro. In questi casi non c’è verso: nessuno scrive codice corretto al primo tentativo, neanche il programmatore più esperto, figuriamoci se alle prime armi. Ecco perché dopo aver salvato spesso, il miglior modo per giungere alla realizzazione di un software funzionante è compilare compilare e compilare spesso il nostro codice, pezzo pezzo, senza arrivare alla fine quando magari abbiamo scritto decine se non centinaia di righe di codice che non si compilano per mille errori diversi. E se ho errore che faccio? Chiamo il prof tanto lui ne capisce! Si, sicuramente il prof vi darà una mano ma è fondamentale per crescere come competenze di sviluppatore cominciare a leggere i messaggi di errore della compilazione. In genere gli ide hanno tutti una finestrella che si apre in basso, sotto il codice sorgente, dove compaiono uno o più messaggi di errore con la riga corrispondente del codice sorgente scritto e spesso, addirittura, un suggerimento su quale possa essere l’errore, dalla parentesi mancante, al punto virgola assente, al nome di variabile o di funzione/comando sbagliato ecc. Se si scrive un software semplice e banale, anche gli errori di compilazione sono sempre gli stessi, semplici da comprendere, a patto di fare un piccolo sforzo in inglese.

Ok, ho salvato, compila si compila quindi la sintassi del mio codice è scritta bene ma non funziona. Che faccio? Vai chiamo il professore, aggiusta lui. Ok, di nuovo, m non impari nulla. Quando si gioca con variabili, cicli e varie strutture condizionali, è facile sbagliare, soprattutto se si scrive tanto codice annidato. Il miglior modo è fare il debug col tasto f9 e l’esecuzione a runtime passo passo, ma spesso basta mettere la stampa di qualche messaggio nel punto giusto, qua e la nel codice stampando qualche frase o contenuto di variabile per capire se l’esecuzione del codice è corretta nei diversi punti che vogliamo testare e capire se l’esecuzione passa in un ramo if o else, se i conti che fa sono corretti, se sta facendo un numero corretto di cicli ecc.

Ultima modifica 3 Aprile 2022