Collez un fragment ou un fichier entier : le formateur reconstruit l’indentation avec des tabulations et ne modifie aucun jeton. Les directives de préprocesseur et les chaînes brutes C++11 sont recopiées octet par octet, donc les macros restent sur une seule ligne logique.
Fonctionne localement dans votre navigateurCollez du code C++ et le formateur réorganise le texte : une instruction par ligne à chaque point-virgule, accolades sur leur propre ligne, une tabulation par niveau d’imbrication, sans lignes vides. C’est un réécrivain de texte qui s’exécute dans le navigateur : rien de ce que vous collez n’est envoyé.
Seuls les espaces changent. Les jetons, chaînes, commentaires et directives de préprocesseur sont recopiés tels quels, et c’est ce qui garde la sortie compilable : une macro comme #define SWAP(a,b) do { … } while(0) reste sur une seule ligne logique, et une chaîne brute C++11 R"(…)" conserve ses guillemets et ses accolades.
Seul l’espacement entre les jetons change : des sauts de ligne sont insérés après les points-virgules qui terminent une instruction, les accolades s’ouvrent et se ferment sur leur propre ligne et l’indentation est reconstruite avec des tabulations. Les suites de lignes vides disparaissent. Les lignes longues ne sont pas coupées et aucun jeton n’est renommé, réordonné ou supprimé.
Les lignes de préprocesseur sont recopiées octet par octet jusqu’à la fin de la ligne logique, continuation par barre oblique comprise. Une macro multiligne survit donc : aucun saut n’est inséré dans #define, les blocs #if / #endif gardent leur structure et une directive qui suit une accolade fermante reste en début de ligne.
Les deux styles de commentaire sont préservés : // jusqu’à la fin de la ligne et /* … */ sur plusieurs lignes, même si le commentaire contient des accolades ou des guillemets. Les chaînes et caractères littéraux restent tels qu’écrits : un guillemet échappé ou un point-virgule dans une chaîne ne déplacent jamais la mise en page du code autour.
Les chaînes brutes C++11 — R"(…)", avec ou sans délimiteur comme R"xx(… )xx" — sont copiées textuellement : guillemets, accolades et points-virgules qu’elles contiennent ne peuvent pas être pris pour du code. La syntaxe de gabarit comme std::vector<std::pair<int, std::string>> n’est pas touchée : le tabulateur ne connaît pas les chevrons.
Aucun analyseur C++ ne tourne derrière la page : la syntaxe n’est ni vérifiée ni réparée ; une parenthèse manquante ou une chaîne non fermée reviennent réindentées, sans message d’erreur. La largeur d’indentation, la place des accolades et la longueur des lignes sont fixes (une tabulation, accolades sur leur ligne, pas de coupure) ; pour un style de projet comme Google ou LLVM, utilisez clang-format.
Le résultat est coloré avec la grammaire C/C++ de highlight.js ; au-delà de 120 Ko, la sortie s’affiche sans coloration pour que la page reste fluide. L’outil ne compile ni n’exécute le code et fonctionne hors ligne une fois la page chargée.