Ausschnitt oder ganze Datei einfügen: Der Formatierer baut die Einrückung mit Tabulatoren neu auf und ändert keine Tokens. Präprozessorzeilen und C++11-Raw-Strings werden byteweise übernommen, Makros bleiben also in einer logischen Zeile.
Läuft lokal in deinem BrowserC++-Quelltext einfügen und der Formatierer baut das Layout neu auf: eine Anweisung pro Zeile an jedem Semikolon, geschweifte Klammern auf eigenen Zeilen, ein Tabulator pro Verschachtelungsebene, keine Leerzeilen. Es ist ein reiner Text-Umschreiber im Browser — nichts, was Sie einfügen, wird hochgeladen.
Geändert werden nur Leerzeichen. Tokens, Strings, Kommentare und Präprozessorzeilen werden unverändert übernommen; genau das hält die Ausgabe kompilierbar: Ein Makro wie #define SWAP(a,b) do { … } while(0) bleibt in einer logischen Zeile, und ein C++11-Raw-String R"(…)" behält seine Anführungszeichen und Klammern.
Nur der Weißraum zwischen Tokens ändert sich: Zeilenumbrüche entstehen nach abschließenden Semikolons, Klammern öffnen und schließen auf eigenen Zeilen, die Einrückung wird mit Tabulatoren neu aufgebaut. Folgen von Leerzeilen entfallen. Lange Zeilen werden nicht umbrochen, kein Token wird umbenannt, umsortiert oder entfernt.
Präprozessorzeilen werden bis zum Ende der logischen Zeile byteweise übernommen, einschließlich der Fortsetzung mit Backslash. Deshalb übersteht ein mehrzeiliges Makro die Formatierung: Innerhalb von #define werden keine Umbrüche eingefügt, #if-/#endif-Blöcke behalten ihre Struktur, und eine Direktive nach einer schließenden Klammer bleibt am Zeilenanfang.
Beide Kommentarformen bleiben erhalten: // bis zum Zeilenende und /* … */ über mehrere Zeilen, auch wenn der Kommentar Klammern oder Anführungszeichen enthält. String- und Zeichenliterale bleiben wie geschrieben, ein escaptes Anführungszeichen oder ein Semikolon im String verschiebt also nie das Layout des umgebenden Codes.
C++11-Raw-Strings — R"(…)", mit oder ohne Delimiter wie R"xx(… )xx" — werden wörtlich kopiert; Anführungszeichen, Klammern und Semikolons darin können nicht als Code missverstanden werden. Template-Syntax wie std::vector<std::pair<int, std::string>> bleibt unberührt: Der Tabifier kennt keine spitzen Klammern.
Hinter der Seite steht kein C++-Parser, Syntax wird weder geprüft noch repariert: Eine fehlende Klammer oder ein nicht beendeter String kommen neu eingerückt und ohne Fehlermeldung zurück. Einrückbreite, Klammerstellung und Zeilenlänge sind fest (ein Tabulator, Klammern auf eigener Zeile, kein Umbruch); für Projektstile wie Google oder LLVM nehmen Sie clang-format.
Das Ergebnis wird mit der C/C++-Grammatik von highlight.js hervorgehoben; ab 120 KB erscheint die Ausgabe ohne Hervorhebung, damit die Seite bedienbar bleibt. Das Werkzeug kompiliert und startet den Code nicht und arbeitet nach dem Laden offline.