Come usare il compilatore C++ online
- Scrivi o incolla il tuo codice C++ nell'editor. Serve una funzione
int main(). Ripristina esempio riporta il programma iniziale. - Se il tuo programma legge da
std::cinostd::getline, inserisci prima l'input nel campo Input (stdin). - Premi Esegui, oppure Ctrl + Invio (⌘ + Invio su Mac). La pagina compila
main.cpp, mostra eventuali messaggi diagnostici e poi esegue il programma. - Scegli un limite di tempo di 5, 15 o 60 secondi. Quando un'esecuzione lo supera, il programma viene fermato. Interrompi lo termina subito.
Alla prima esecuzione la pagina scarica la toolchain Clang, circa 30 MB, che poi il browser mette in cache. In seguito, compilare un programma tipico richiede molto meno di un secondo. Copia e main.cpp ti permettono di conservare il codice, A−/A+ ridimensionano il testo, il pulsante del layout alterna tra pannelli affiancati e impilati e Schermo intero (Ctrl/⌘ + Maiusc + F, Esc per uscire) dà all'editor tutta la finestra.
Non viene caricato nulla. Sia il compilatore sia il tuo programma vengono eseguiti nel tuo browser e il tuo codice più recente viene salvato solo nella memoria locale del browser.
Cosa è supportato
La pagina usa un vero compilatore Clang/LLVM 21, compilato per WebAssembly dal progetto YoWASP. Compila il tuo sorgente in un programma WebAssembly (WASI) che il browser esegue. Il comando che lancia equivale a:
clang++ main.cpp -std=c++20 -O2 -Wall -fno-exceptions -o main.wasm
- C++20:
auto, lambda,forbasati su intervalli, structured binding,constexpr, concept e inizializzatori designati. - La libreria standard di libc++:
vector,string,map,unordered_map,set,algorithm,numeric,iostream,sstream,iomanip,optionale il resto dei contenitori e degli algoritmi. - I messaggi diagnostici di Clang, stampati esattamente come li riporta il compilatore con
main.cpp:line:column, compresi gli errori dei template e gli avvisi di-Wall. - Un valore di ritorno diverso da zero da
mainviene segnalato come Processo terminato con codice N.
Perché le eccezioni sono disattivate
Le eccezioni C++ richiedono in WebAssembly un supporto runtime aggiuntivo che questa toolchain nel browser non offre, quindi il codice viene compilato con -fno-exceptions. Di conseguenza try, throw e catch non sono supportati e il codice che li usa non viene compilato. Nemmeno le funzioni di libreria che normalmente lancerebbero un'eccezione, come std::stoi con un input non valido o .at() con un indice fuori intervallo, possono essere intercettate qui. Controlla l'input prima di convertirlo, verifica gli indici rispetto a size() oppure restituisci un std::optional per segnalare un errore:
#include <optional>
#include <string>
std::optional<int> parse(const std::string& s) {
if (s.empty()) return std::nullopt;
int v = 0;
for (char c : s) {
if (c < '0' || c > '9') return std::nullopt;
v = v * 10 + (c - '0');
}
return v;
}
Altri limiti
- Niente thread:
std::thread,std::asynce pthreads non sono disponibili. - Niente rete, niente
fork/exece nessun vero file system, quindistd::ifstreamnon può leggere file dal tuo computer. Usa invece lo stdin. - Nessuna libreria grafica o GUI come Qt, SFML o OpenGL. L'output è solo testo.
- Le librerie di terze parti come Boost non sono installate. Tutto deve stare nell'unico file
main.cpp.
Il C++ moderno in poche righe
Il programma iniziale mostra gli idiomi che rendono il C++ moderno più conciso del codice dei vecchi manuali:
std::map<std::string, int> ages{ {"Ada", 36}, {"Linus", 54} };
for (const auto& [name, age] : ages) // structured bindings
std::cout << name << " is " << age << '\n';
std::vector<int> v{5, 3, 9, 1};
std::sort(v.begin(), v.end(), std::greater<>());
auto evens = std::count_if(v.begin(), v.end(), [](int x) { return x % 2 == 0; });
- Nei cicli preferisci
'\n'astd::endl.endlsvuota anche il buffer dello stream, il che è più lento. - Quando combini
std::cin >> nconstd::getline, chiama primastd::cin.ignore(), altrimentigetlinelegge il resto della riga precedente come stringa vuota. operator[]su unastd::mapinserisce un valore predefinito quando la chiave manca. Usafindocontains(C++20) per cercare una chiave senza modificare la mappa.
Domande frequenti
Quale standard C++ viene usato?
C++20, compilato da Clang 21 con -O2 -Wall. Anche il codice scritto per C++11, C++14 o C++17 viene compilato.
Perché il mio codice con try/catch non viene compilato?
Le eccezioni sono disattivate con -fno-exceptions. Sostituiscile con valori di ritorno, std::optional o controlli espliciti prima dell'operazione a rischio.
Posso usare bits/stdc++.h?
No. Quell'header è specifico di GCC e non esiste in libc++. Includi gli header standard che ti servono, come <iostream>, <vector> e <algorithm>.
Esiste una versione per il C puro?
Sì, il compilatore C online usa lo stesso Clang in modalità C17. Puoi anche consultare tutti i compilatori online del sito.
Aggiornato