Installare un compilatore C su Windows può essere semplice quanto complesso, a seconda della procedura scelta. Ci sono due modi principali per farlo, uno più immediato e uno più flessibile. Si può decidere di installare l'IDE Visual Studio e lasciar fare tutto a lui, ma si sarà praticamente obbligati ad usare l'IDE per tutte le interazioni con gli strumenti di sviluppo C, oppure si può andare a installare gli strumenti di sviluppo manualmente senza l'IDE e andare a configurare il nostro editor di codice per fare uso degli strumenti scaricati.
Qui andrò a spiegare i dettagli della seconda procedura, dato che la prima è abbastanza semplice; basta cercare Visual Studio sul web, scaricare l'installer e seguire le istruzioni a schermo.
Potrei partire subito con la lista di cose da fare, ma preferisco prima spiegare
un attimo cosa e soprattutto perché stiamo facendo le cose in questo modo. C e
C++, a differenza di altri linguaggi, sono solo "standard", documenti che
descrivono come C dovrebbe funzionare, ed esistono quindi diverse
implementazioni di questi standard, di queste specifiche. Ogni implementazione è
divisa in due componenti principali: il compilatore C, che prende il nostro
codice sorgente e lo trasforma in codice macchina eseguibile, e la libreria
standard C che contiene tutte le funzioni, appunto, "di libreria", come
printf(), scanf(), e insomma tutte le funzioni che possiamo includere nel nostro
codice con direttive come #include <stdlib.h>
eccetera.
Dovrebbe essere ora un po' più chiaro cosa dobbiamo fare ora, ovvero installare un compilatore e una libreria standard. Su Windows esistono diversi compilatori C, ma solo una libreria standard. Questi fanno parte di "MSVC", che sta per "Microsoft Visual C", che come dice il nome sono parte della suite di Visual Studio. Per installarli è necessario scaricare i "Visual Studio Build Tools", che sono gli stessi strumenti installati con l'IDE ma senza l'IDE. I Build Tools sono sul sito di Visual Studio; basta cercarli sul web e andare in fondo alla pagina (che dovrebbe essere https://visualstudio.microsoft.com/downloads). Una volta scaricato, bisogna andare nella sezione "Singoli componenti" e selezionare il componente MSVC, Windows SDK, e C Runtime.
A questo punto abbiamo già un ambiente di sviluppo C, benché molto minimale.
Possiamo accedere al compilatore aprendo il "Prompt dei comandi di sviluppo
nativo x64", e dando il comando cl
. Per compilare un file si può dare cl
nomefile.c
, ed eseguire il .exe generato.
Con questo set up, però, aprendo un editor di codice come VSCode non ci saranno funzionalità "smart" come segnalazione di errori, warning, suggerimenti, eccetera. Anche qui, abbiamo due opzioni: la prima è specifica a VSCode, di qualità relativamente bassa, (e ho visto che è un po' buggata, ma non avendola usata molto personalmente non ne sono sicuro), mentre la seconda è utilizzabile da pressoché tutti gli editor di codice, è più usata, dà suggerimenti migliori, ma vanno fatti dei passaggi a mano. Ovviamente, sceglieremo la seconda opzione.
La seconda opzione consiste nell'usare clangd, un Language Server basato sul compilatore Clang, che parla il Language Server Protocol (LSP). In pratica è un programmino che parla con un qualsiasi editor di codice che supporta l'LSP e gli dice se e cosa non va bene del codice presente nell'editor. Clang invece è un ottimo compilatore basato sul progetto LLVM, ed è naturale che abbia suggerimenti molto utili.
Per scaricare clangd è sufficiente recarsi alla pagina GitHub di LLVM e
scaricare l'ultima release stabile di LLVM-versione-win64.exe
, disponibile al
link https://github.com/llvm/llvm-project/releases/latest nella sezione
"Assets". Nell'exe scaricato non è contenuto solo clangd, ma l'intera suite
LLVM, tra cui un debugger, chiamato LLDB, e il compilatore Clang. Quest'ultimo
può essere utilizzato in alternativa al compilatore di MSVC, cl
; a me
personalmente piace di più dato che fornisce warning più completi e produce
codice generalmente più ottimizzato, ma a voi la scelta.
Bene, ora che abbiamo installato tutta la roba che ci serve, possiamo procedere con l'ultimo passaggio: configurare l'editor di codice per fare uso di quello che abbiamo installato. Essendo clangd un server LSP standard è possibile usare un qualsiasi editor di codice molto facilmente, ed io ho scelto VSCode. Per usare clangd su VSCode è sufficiente installare l'estensione "clangd" ed assicurarsi che l'estensione C/C++ di Microsoft non sia installata, in quanto andrebbe in conflitto con clangd. Finita l'installazione, il nostro editor dovrebbe essere in grado di sfruttare tutte le funzionalità intelligenti che potremmo desiderare, come salti a definizione di funzioni, documentazione appoggiando il puntatore su un simbolo, eccetera.
Nonostante LSP sia fantastico per quanto riguarda la scrittura di codice, non
fornisce altre funzionalità che potremmo volere, come il debug in un click di un
programma. Quest'area è meno standardizzata, per cui so dirvi solo come
configurare il debugger su VSCode. Avete presente come quando vi ho fatto
installare LLVM vi ho detto che avete installato anche il debugger LLDB? Ecco,
faremo uso proprio di quello attraverso la bellissima estensione CodeLLDB. Per
usarla, apriamo una qualsiasi cartella contenente un progetto C. Fatto ciò,
dobbiamo dire a VSCode cosa fare quando schiacciamo il tasto debug (o F5
).
Questo viene fatto piazzando un file JSON nella cartella .vscode
del progetto,
contenente più o meno questo:
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"expressions": "native",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/mioprogetto.exe",
"preLaunchTask": "compile",
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
{
"version": "2.0.0",
"tasks": [
{
"label": "compile",
"type": "process",
"command": "clang",
"args": ["-o", "mioprogetto.exe", "mioprogetto.c"],
"presentation": {
"reveal": "silent",
"focus": false
}
}
]
}