So nutzen Sie den Online-C++-Compiler
- Geben Sie Ihren C++-Code ein oder fügen Sie ihn ein: direkt in den Editor. Er braucht eine Funktion
int main(). Beispiel zurücksetzen stellt das Startprogramm wieder her. - Wenn Ihr Programm von
std::cinoderstd::getlineliest, tragen Sie die Eingabe vorher in das Feld Eingabe (stdin) ein. - Klicken Sie auf Ausführen oder drücken Sie Strg + Enter (⌘ + Enter auf dem Mac). Die Seite kompiliert
main.cpp, zeigt etwaige Diagnosemeldungen an und führt das Programm dann aus. - Wählen Sie ein Zeitlimit von 5, 15 oder 60 Sekunden. Überschreitet ein Lauf es, wird das Programm angehalten. Stopp beendet es sofort.
Beim ersten Lauf lädt die Seite die Clang-Toolchain herunter, rund 30 MB, die Ihr Browser anschließend zwischenspeichert. Danach dauert das Kompilieren eines typischen Programms deutlich weniger als eine Sekunde. Mit Kopieren und main.cpp sichern Sie Ihren Code, A−/A+ ändern die Schriftgröße, die Layout-Schaltfläche wechselt zwischen nebeneinander und untereinander angeordneten Bereichen, und Vollbild (Strg/⌘ + Umschalt + F, Esc zum Beenden) gibt dem Editor das ganze Fenster.
Nichts wird hochgeladen. Der Compiler und Ihr Programm laufen beide in Ihrem Browser, und Ihr zuletzt bearbeiteter Code wird nur im lokalen Speicher Ihres Browsers gespeichert.
Was unterstützt wird
Die Seite verwendet einen echten Clang/LLVM 21-Compiler, den das Projekt YoWASP für WebAssembly gebaut hat. Er kompiliert Ihren Quelltext zu einem WebAssembly-Programm (WASI), das der Browser ausführt. Der ausgeführte Befehl entspricht:
clang++ main.cpp -std=c++20 -O2 -Wall -fno-exceptions -o main.wasm
- C++20:
auto, Lambdas, bereichsbasiertesfor, Structured Bindings,constexpr, Concepts und Designated Initializers. - Die Standardbibliothek aus libc++:
vector,string,map,unordered_map,set,algorithm,numeric,iostream,sstream,iomanip,optionalund die übrigen Container und Algorithmen. - Die Diagnosemeldungen von Clang selbst, genau so ausgegeben, wie der Compiler sie meldet, mit
main.cpp:line:column, einschließlich Template-Fehlern und-Wall-Warnungen. - Ein Rückgabewert ungleich null aus
mainwird als Prozess mit Code N beendet gemeldet.
Warum Exceptions deaktiviert sind
C++-Exceptions brauchen in WebAssembly zusätzliche Laufzeitunterstützung, die diese Toolchain im Browser nicht bietet. Deshalb wird der Code mit -fno-exceptions kompiliert. Das heißt: try, throw und catch werden nicht unterstützt, und Code, der sie verwendet, lässt sich nicht kompilieren. Bibliotheksfunktionen, die normalerweise eine Exception auslösen würden, etwa std::stoi bei ungültiger Eingabe oder .at() mit einem Index außerhalb des Bereichs, lassen sich hier ebenfalls nicht abfangen. Prüfen Sie die Eingabe vor der Umwandlung, vergleichen Sie Indizes mit size() oder geben Sie ein std::optional zurück, um einen Fehler anzuzeigen:
#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;
}
Weitere Einschränkungen
- Keine Threads:
std::thread,std::asyncund pthreads stehen nicht zur Verfügung. - Kein Netzwerk, kein
fork/execund kein echtes Dateisystem, daher kannstd::ifstreamkeine Dateien von Ihrem Computer lesen. Verwenden Sie stattdessen stdin. - Keine Grafik- oder GUI-Bibliotheken wie Qt, SFML oder OpenGL. Die Ausgabe ist reiner Text.
- Bibliotheken von Drittanbietern wie Boost sind nicht installiert. Alles muss in der einen Datei
main.cppstehen.
Modernes C++ in wenigen Zeilen
Das Startprogramm zeigt die Idiome, die modernes C++ kürzer machen als älteren Lehrbuchcode:
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; });
- Verwenden Sie in Schleifen lieber
'\n'alsstd::endl.endlleert zusätzlich den Puffer des Streams, was langsamer ist. - Wenn Sie
std::cin >> nmitstd::getlinemischen, rufen Sie vorherstd::cin.ignore()auf, sonst liestgetlineden Rest der vorherigen Zeile als leere Zeichenkette. operator[]auf einerstd::mapfügt einen Standardwert ein, wenn der Schlüssel fehlt. Verwenden Siefindodercontains(C++20), um einen Schlüssel nachzuschlagen, ohne die Map zu verändern.
Häufig gestellte Fragen
Welcher C++-Standard wird verwendet?
C++20, kompiliert von Clang 21 mit -O2 -Wall. Code, der für C++11, C++14 oder C++17 geschrieben wurde, lässt sich ebenfalls kompilieren.
Warum lässt sich mein Code mit try/catch nicht kompilieren?
Exceptions sind mit -fno-exceptions deaktiviert. Ersetzen Sie sie durch Rückgabewerte, std::optional oder ausdrückliche Prüfungen vor der riskanten Operation.
Kann ich bits/stdc++.h verwenden?
Nein. Dieser Header ist GCC-spezifisch und existiert in libc++ nicht. Binden Sie die Standard-Header ein, die Sie brauchen, etwa <iostream>, <vector> und <algorithm>.
Gibt es eine Version für reines C?
Ja, der Online-C-Compiler verwendet dasselbe Clang im C17-Modus. Sie können auch alle Online-Compiler der Website durchsuchen.
Aktualisiert