Como usar o compilador C++ online
- Digite ou cole o seu código C++ no editor. Ele precisa de um
int main(). Restaurar exemplo traz de volta o programa inicial. - Se o seu programa lê dados de
std::cinoustd::getline, coloque a entrada na caixa Entrada (stdin) antes. - Clique em Executar ou pressione Ctrl + Enter (⌘ + Enter no Mac). A página compila o
main.cpp, mostra os diagnósticos, se houver, e depois executa o programa. - Escolha um limite de tempo de 5, 15 ou 60 segundos. Quando uma execução passa desse limite, o programa é interrompido. Parar encerra a execução na hora.
Na primeira execução, a página baixa o conjunto de ferramentas Clang, com cerca de 30 MB, que o seu navegador guarda em cache. Depois disso, compilar um programa típico leva bem menos de um segundo. Copiar e main.cpp permitem guardar o seu código, A−/A+ mudam o tamanho do texto, o botão de layout alterna entre painéis lado a lado e empilhados, e Tela cheia (Ctrl/⌘ + Shift + F, Esc para sair) dá ao editor a janela inteira.
Nada é enviado. O compilador e o seu programa rodam no seu navegador, e o seu código mais recente fica salvo apenas no armazenamento local do navegador.
O que é suportado
A página usa um compilador Clang/LLVM 21 de verdade, compilado para WebAssembly pelo projeto YoWASP. Ele compila o seu código-fonte num programa WebAssembly (WASI) que o navegador executa. O comando que ele executa equivale a:
clang++ main.cpp -std=c++20 -O2 -Wall -fno-exceptions -o main.wasm
- C++20:
auto, lambdas,forbaseado em intervalo, structured bindings,constexpr, concepts e inicializadores designados. - A biblioteca padrão da libc++:
vector,string,map,unordered_map,set,algorithm,numeric,iostream,sstream,iomanip,optionale o restante dos contêineres e algoritmos. - Os próprios diagnósticos do Clang, exibidos exatamente como o compilador os informa, com
main.cpp:line:column, incluindo erros de template e avisos do-Wall. - Um retorno diferente de zero em
mainé informado como O processo terminou com o código N.
Por que as exceções estão desativadas
As exceções do C++ precisam de suporte extra em tempo de execução no WebAssembly, e esse conjunto de ferramentas no navegador não oferece isso; por isso, o código é compilado com -fno-exceptions. Como resultado, try, throw e catch não são suportados, e um código que os usa não compila. Funções da biblioteca que normalmente lançariam exceções, como std::stoi com uma entrada inválida ou .at() com um índice fora do intervalo, também não podem ser capturadas aqui. Verifique a entrada antes de convertê-la, compare os índices com size() ou retorne um std::optional para sinalizar uma falha:
#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;
}
Outras limitações
- Sem threads:
std::thread,std::asynce pthreads não estão disponíveis. - Sem rede, sem
fork/exece sem sistema de arquivos real; assim,std::ifstreamnão consegue ler arquivos do seu computador. Use a entrada padrão (stdin) em vez disso. - Sem bibliotecas gráficas ou de interface como Qt, SFML ou OpenGL. A saída é apenas texto.
- Bibliotecas de terceiros como a Boost não estão instaladas. Tudo precisa estar no arquivo único
main.cpp.
C++ moderno em poucas linhas
O programa inicial mostra as construções que deixam o C++ moderno mais curto do que o código dos livros antigos:
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; });
- Prefira
'\n'astd::endlem loops. Oendltambém descarrega o fluxo, o que é mais lento. - Ao misturar
std::cin >> ncomstd::getline, chamestd::cin.ignore()antes; caso contrário, ogetlinelê o resto da linha anterior como uma string vazia. - O
operator[]de umstd::mapinsere um valor padrão quando a chave não existe. Usefindoucontains(C++20) para procurar uma chave sem alterar o map.
Perguntas frequentes
Qual padrão do C++ é usado?
C++20, compilado pelo Clang 21 com -O2 -Wall. Códigos escritos para C++11, C++14 ou C++17 também compilam.
Por que o meu código com try/catch não compila?
As exceções estão desativadas com -fno-exceptions. Substitua-as por valores de retorno, std::optional ou verificações explícitas antes da operação arriscada.
Posso usar bits/stdc++.h?
Não. Esse cabeçalho é específico do GCC e não existe na libc++. Inclua os cabeçalhos padrão de que você precisa, como <iostream>, <vector> e <algorithm>.
Existe uma versão para C puro?
Sim, o compilador C online usa o mesmo Clang no modo C17. Você também pode ver todos os compiladores online do site.
Atualizado