Formatador de código C++

Cole um trecho ou um arquivo inteiro: o formatador reconstrói a indentação com tabs e não edita nenhum token. Diretivas de pré-processador e raw strings do C++11 são copiadas byte a byte, então as macros ficam em uma única linha lógica.

Funciona localmente no seu navegador

Como o formatador de C++ funciona

Cole um código C++ e o formatador reorganiza o texto: uma instrução por linha a cada ponto e vírgula, chaves em linhas próprias, um tab por nível de aninhamento e sem linhas em branco. É um reescritor de texto simples que roda no navegador, então nada do que você cola é enviado a um servidor.

A reescrita é só de espaços. Tokens, strings, comentários e diretivas de pré-processador são copiados como estão, e é isso que mantém a saída compilável: uma macro como #define SWAP(a,b) do { … } while(0) continua em uma única linha lógica, e uma raw string do C++11, R"(…)", preserva suas aspas e chaves.

  1. Cole ou digite o código: um trecho ou um arquivo inteiro. A área de texto mantém o exemplo #include <iostream> como ponto de partida.
  2. Clique em Formatar código C++. O resultado aparece abaixo, com destaque da gramática de C/C++.
  3. Confira o layout: as instruções terminam em ponto e vírgula e cada bloco recebe um tab de indentação. Se você editar a entrada depois de formatar, o resultado anterior fica esmaecido e uma linha de status pede para rodar de novo.
  4. Use Copiar para levar o texto puro (a cor existe só na tela) e Limpar para esvaziar os dois painéis antes do próximo uso.

O que muda e o que é preservado

O que o formatador altera no código

Só os espaços entre tokens mudam: quebras de linha entram depois dos pontos e vírgulas que encerram uma instrução, as chaves abrem e fecham em linha própria e a indentação é reconstruída com tabs. Sequências de linhas em branco são removidas. Linhas longas não são quebradas e nenhum token é renomeado, reordenado ou removido.

As linhas de pré-processador são copiadas byte a byte até o fim da linha lógica, incluindo a continuação com barra invertida. Por isso uma macro de várias linhas sobrevive: o formatador não insere quebras dentro de #define, os blocos #if / #endif mantêm a estrutura e uma diretiva depois de uma chave de fechamento continua no início da própria linha.

Comentários, strings e raw strings

Os dois estilos de comentário são preservados: // até o fim da linha e /* … */ em várias linhas, inclusive quando o comentário contém chaves ou aspas. Strings e caracteres literais ficam como foram escritos, então uma aspa escapada ou um ponto e vírgula dentro de uma string nunca mexem no layout do código ao redor.

Raw strings do C++11 — R"(…)", com ou sem delimitador como R"xx(… )xx" — são copiadas literalmente, de modo que aspas, chaves e pontos e vírgulas dentro delas não podem ser confundidos com código. Sintaxe de templates como std::vector<std::pair<int, std::string>> não é tocada: o tabulador não interpreta os sinais de maior e menor.

Limites e para que serve o resultado

Não há um analisador de C++ por trás da página, então a sintaxe não é verificada nem corrigida: um parêntese faltando ou uma string não fechada voltam com a nova indentação e sem nenhuma mensagem de erro. A largura da indentação, a posição das chaves e o comprimento das linhas são fixos (um tab, chaves em linha própria, sem quebra); para estilos de projeto como Google ou LLVM use clang-format.

O resultado é destacado com a gramática de C/C++ do highlight.js; acima de 120 KB a saída aparece sem destaque para a página continuar respondendo. A ferramenta não compila nem executa o código e funciona offline depois que a página carrega.

Ferramentas recentes: