Pega un fragmento o un archivo completo: el formateador reconstruye la sangría con tabuladores y no edita ningún token. Las directivas de preprocesador y las cadenas raw de C++11 se copian byte a byte, así que las macros permanecen en una sola línea lógica.
Se ejecuta localmente en tu navegadorPega código C++ y el formateador reorganiza el texto: una instrucción por línea en cada punto y coma, llaves en su propia línea, un tabulador por nivel de anidamiento y sin líneas en blanco. Es un reescritor de texto plano que se ejecuta en el navegador, así que nada de lo que pegas se sube a un servidor.
La reescritura solo afecta a los espacios. Los tokens, las cadenas, los comentarios y las directivas del preprocesador se copian tal cual, que es lo que mantiene compilable la salida: una macro como #define SWAP(a,b) do { … } while(0) permanece en una sola línea lógica y una cadena raw de C++11, R"(…)", conserva sus comillas y llaves.
Solo cambian los espacios entre tokens: se insertan saltos de línea tras los puntos y coma que cierran una instrucción, las llaves abren y cierran en su propia línea y la sangría se reconstruye con tabuladores. Las líneas en blanco consecutivas se eliminan. Las líneas largas no se parten y ningún token se renombra, reordena ni elimina.
Las líneas de preprocesador se copian byte a byte hasta el final de la línea lógica, incluida la continuación con barra invertida. Por eso una macro multilínea sobrevive: el formateador no inserta saltos dentro de #define, los bloques #if / #endif mantienen su estructura y una directiva que sigue a una llave de cierre se queda al inicio de su línea.
Se conservan los dos estilos de comentario: // hasta el final de la línea y /* … */ en varias líneas, incluso si el texto del comentario contiene llaves o comillas. Las cadenas y los caracteres literales se mantienen tal como están escritos, así que una comilla escapada o un punto y coma dentro de una cadena nunca alteran la disposición del código que los rodea.
Las cadenas raw de C++11 — R"(…)", con o sin delimitador como R"xx(… )xx" — se copian textualmente, de modo que las comillas, llaves y puntos y coma que contengan no pueden confundirse con código. La sintaxis de plantillas como std::vector<std::pair<int, std::string>> no se toca: el tabulador no interpreta los ángulos.
No hay un analizador de C++ detrás de la página, así que la sintaxis no se comprueba ni se repara: un paréntesis que falta o una cadena sin cerrar vuelven con la nueva sangría y sin ningún mensaje de error. El ancho de sangría, la posición de las llaves y la longitud de línea son fijos (un tabulador, llaves en su propia línea, sin partir líneas); para estilos de proyecto como Google o LLVM usa clang-format.
El resultado se resalta con la gramática de C/C++ de highlight.js; a partir de 120 KB se muestra sin resaltado para que la página siga respondiendo. La herramienta no compila ni ejecuta el código y funciona sin conexión una vez cargada la página.