Il corso di linguaggio C riprende dopo una pausa piuttosto lunga. Fino all’ultimo episodio, dedicato agli algoritmi di crittografia, tutto il codice è stato scritto ed eseguito direttamente nel browser con OnlineGDB: una scelta comoda, perché non richiede di installare nulla sul computer, e che resta perfettamente valida per chi preferisce continuare così.
Prima di affrontare gli ultimi argomenti del corso, però, vale la pena fare un passo verso il modo in cui il software si sviluppa normalmente, cioè in locale. Un ambiente di sviluppo installato sulla propria macchina rende visibile ciò che il browser nascondeva, a partire dal file eseguibile vero e proprio, e permette di capire meglio cosa succede tra il momento in cui si scrive il codice e quello in cui il programma va in esecuzione. In questo episodio vediamo come arrivarci su Windows, macOS e Linux.
Dal sorgente all’eseguibile: compilatore e linker
Il codice C scritto finora, basato solo sulle librerie standard, è intrinsecamente multipiattaforma: lo stesso sorgente può essere portato su qualunque sistema. Per eseguirlo, però, va trasformato in qualcosa che la macchina capisca, e questo passaggio avviene in più fasi.
La prima è la compilazione, che converte il sorgente C in un file oggetto, cioè in codice macchina per la piattaforma su cui si sta lavorando. La seconda è il linking: il linker prende uno o più file oggetto (uno per ogni file sorgente, più eventuali librerie esterne, che sono a loro volta codice oggetto impacchettato) e li unisce nell’eseguibile finale. L’eseguibile non è solo codice macchina: contiene anche un’intestazione con le informazioni che servono al sistema operativo per caricare il programma in memoria e mandarlo in esecuzione.
Nell’ambiente online tutta questa catena avveniva dietro le quinte. In locale, invece, serve una coppia compilatore-linker installata sul sistema, e un editor con cui scrivere il codice.
Editor o IDE: due strade possibili
In senso stretto basterebbe un qualunque editor di testo puro, anche il Blocco note di Windows. Un editor pensato per il codice, però, offre un supporto concreto: evidenziazione della sintassi, indentazione automatica, e la possibilità di vedere il prototipo di una funzione come printf semplicemente passandoci sopra con il mouse, con i parametri da passare e il valore restituito.
Le strade sono quindi due. La prima è un editor di codice che si appoggia a un compilatore installato separatamente. L’esempio più diffuso è Visual Studio Code di Microsoft, gratuito e multipiattaforma, che con il suo sistema di estensioni copre praticamente qualsiasi esigenza: per il C si aggiunge l’estensione C/C++ di Microsoft, che porta IntelliSense (colorazione, autocompletamento, anteprima dei prototipi), e Code Runner, che aggiunge nell’editor i pulsanti per compilare ed eseguire.
La seconda strada è un IDE, un Integrated Development Environment: un unico programma che integra editor, compilazione, esecuzione e debug. Alcuni IDE includono anche il compilatore, altri richiedono comunque di installarlo a parte. Tra le opzioni gratuite ci sono:
- Xcode, l’ambiente di sviluppo Apple per macOS, pensato per le applicazioni dell’ecosistema Apple ma utilizzabile anche per il C, gratuito per qualunque uso, anche commerciale;
- Eclipse CDT, multipiattaforma e open source, molto utilizzato anche se non è tra gli strumenti che preferisco;
- Visual Studio, solo per Windows, da non confondere con Visual Studio Code: il primo è un IDE completo, l’equivalente Microsoft di Xcode, a pagamento per usi commerciali ma disponibile nella versione Community gratuita con alcune limitazioni di licenza; il secondo è, nel suo cuore, un editor;
- CLion, multipiattaforma e gratuito per uso non commerciale.
La scelta per il corso è caduta su CLion. Il motivo principale è avere lo stesso strumento su tutte e tre le piattaforme, con la stessa configurazione e lo stesso funzionamento, invece di usare Visual Studio su Windows e Xcode su Mac.
Installare il compilatore: le tre piattaforme a confronto
macOS e Linux rendono l’installazione di un compilatore molto semplice. Su Linux, prendendo come riferimento Ubuntu (una delle distribuzioni più diffuse), bastano due comandi da terminale: sudo apt update per aggiornare l’indice dei repository e sudo apt install build-essential, che installa tutto il necessario per compilare in C, a partire da GCC, lo GNU Compiler Collection.
Su macOS c’è la possibilità di installare Xcode completo oppure, se si vuole qualcosa di più leggero, solo gli strumenti a linea di comando con xcode-select --install, che rendono disponibile il compilatore da terminale.
Su Windows la situazione è più articolata: per avere GCC si può passare da un gestore di pacchetti come MSYS2 e installare da lì la suite di compilazione. Con CLion, però, questo passaggio non serve, perché l’IDE porta già con sé la toolchain necessaria. Su Linux e macOS, invece, il compilatore va installato prima, con i comandi appena visti.
CLion su Windows
La prova su Windows è fatta su Windows 11 ARM in macchina virtuale, ma il procedimento è identico su qualunque PC. Dalla pagina di download di CLion il sito riconosce automaticamente l’architettura del sistema; il pacchetto pesa un paio di gigabyte.
Durante l’installazione conviene attivare alcune opzioni: il collegamento sul desktop, l’aggiunta della cartella bin al PATH (utile per usare gli strumenti anche da linea di comando, richiede un riavvio del sistema), la voce nel menu contestuale delle cartelle e l’associazione dei file con estensione .c, così che un doppio clic su un sorgente apra direttamente l’IDE. Le altre associazioni riguardano il C++, che arriverà con un corso dedicato.
Al primo avvio CLion propone di creare un progetto: gli IDE di questo tipo lavorano attorno a questo concetto, con più file sorgenti gestiti insieme. Per iniziare in modo semplice, però, è sufficiente aprire una cartella, in questo caso una cartella di lavoro in Documenti con una sottocartella per il classico Hello World. Il programma parte con una prova di 30 giorni della versione commerciale: dalla gestione delle licenze si può scegliere la versione gratuita per uso non commerciale, indicando come scopo l’apprendimento e l’autoformazione.
Creato il file main.c (di tipo C, non C++), il primo aiuto dell’IDE arriva già sull’include, anche se non sempre nella direzione giusta: il suggerimento proposto è iostream, che appartiene al C++, mentre al C serve stdio.h. Scritto il programma, il pulsante di esecuzione risulta però disabilitato. Serve infatti una configurazione di esecuzione: la più semplice è di tipo “C/C++ file”, a cui si assegna un nome e si indica il file sorgente da compilare, senza bisogno di un progetto vero e proprio.
A quel punto CLion segnala di non trovare il compilatore. La soluzione è nelle impostazioni, alla voce Build, Execution, Deployment e poi Toolchains: aggiungendo la toolchain MinGW, già inclusa nell’installazione, tutto funziona. Dopo compilazione e link compare nella cartella il file main.exe, che si può lanciare anche dal terminale: è proprio l’eseguibile che nell’ambiente web non si vedeva mai. Resta un ultimo dettaglio: l’editor non riconosce ancora il simbolo printf e l’header standard. Probabilmente dipende dall’aver configurato la toolchain senza riavviare, e infatti un Invalidate Caches con riavvio dell’IDE risolve il problema, restituendo anche l’anteprima del prototipo della funzione.
CLion su macOS
Anche su macOS la prova è fatta in una macchina virtuale, per partire da un sistema pulito. Il primo passo è xcode-select --install, da eseguire prima di installare CLion in modo che l’IDE trovi già tutto ciò che gli serve. Terminata l’installazione, gcc --version conferma che il compilatore è disponibile.
CLion, scaricato nella versione per Apple Silicon, si installa trascinandolo nella cartella Applicazioni. La toolchain viene riconosciuta automaticamente; per la licenza gratuita, a differenza di Windows, viene richiesto un login, ma nel frattempo si può comunque lavorare con la versione di prova. Stessi passaggi di prima: cartella di lavoro, file main.c, configurazione di esecuzione di tipo C/C++ file.
Qui emerge un intoppo interessante. La macchina virtuale usa ancora macOS 26, mentre gli strumenti a linea di comando installati sono allineati a macOS 27, uscito da poco, e il compilatore tende a usare l’SDK più recente. Gli SDK precedenti sono comunque presenti, quindi basta indicarlo esplicitamente: modificando la configurazione di esecuzione e aggiungendo un’opzione del compilatore che richiede l’SDK 26, la compilazione va a buon fine.
Su macOS vale la pena notare anche un aiuto in più dell’editor. Definendo una semplice funzione somma con due parametri interi e chiamandola con i valori 2 e 3, CLion mostra accanto agli argomenti il nome dei parametri corrispondenti. È un’indicazione puramente visiva, perché in C i parametri nella chiamata non sono nominati come in altri linguaggi, ma aiuta a non confondere l’ordine degli argomenti. Il programma, naturalmente, stampa 5.
CLion su Linux
Su Ubuntu il percorso è il più lineare. Con sudo apt install build-essential si installano gli strumenti di compilazione, verificati con gcc --version. CLion si può scaricare dal sito, ma dal terminale è più comodo con snap, usando sudo snap install clion --classic.
All’avvio la toolchain viene riconosciuta senza interventi, e il resto è ormai familiare: cartella di lavoro, file main.c, configurazione di esecuzione, anteprima del prototipo di printf e stampa del messaggio in console al primo tentativo.
Tre piattaforme, un unico strumento
Il bilancio è semplice: su Linux nessuna difficoltà, su Windows è bastato selezionare una toolchain già installata, su macOS l’unico problema è stato il disallineamento tra la versione del sistema e quella degli strumenti a linea di comando. In tutti e tre i casi si ottiene lo stesso ambiente, con le stesse funzioni di aiuto e lo stesso modo di lavorare, indipendentemente dal computer che si usa.
Resta comunque possibile continuare con OnlineGDB, ma un IDE in locale è il modo in cui normalmente si sviluppa, ed è anche un’occasione per toccare con mano concetti come file oggetto ed eseguibile. Dal prossimo episodio il corso riprende con un argomento di una certa importanza: la gestione dinamica della memoria, che aprirà la strada alle strutture dati, non ancora affrontate proprio perché si sposano particolarmente bene con l’allocazione dinamica.
Per seguire passo passo l’installazione di CLion su Windows, macOS e Linux, compresa la risoluzione dei piccoli problemi incontrati su ciascuna piattaforma, il video di questa settimana è disponibile sul canale.
