Cómo usar el compilador de C++ online
- Escribe o pega tu código C++ en el editor. Necesita un
int main(). Restablecer ejemplo recupera el programa inicial. - Si tu programa lee de
std::cinostd::getline, escribe antes la entrada en la casilla Entrada (stdin). - Pulsa Ejecutar, o Ctrl + Enter (⌘ + Enter en un Mac). La página compila
main.cpp, muestra los diagnósticos que haya y luego ejecuta el programa. - Elige un Límite de tiempo de 5, 15 o 60 segundos. Si una ejecución lo supera, el programa se detiene. Detener lo para al instante.
En la primera ejecución, la página descarga la cadena de herramientas Clang, de unos 30 MB, que tu navegador guarda después en caché. A partir de ahí, compilar un programa normal tarda bastante menos de un segundo. Copiar y main.cpp te permiten guardar tu código, A−/A+ cambian el tamaño del texto, el botón de diseño alterna entre paneles uno al lado del otro y apilados, y Pantalla completa (Ctrl/⌘ + Shift + F, Esc para salir) da al editor toda la ventana.
No se sube nada. Tanto el compilador como tu programa se ejecutan en tu navegador, y tu último código solo se guarda en el almacenamiento local de tu navegador.
Qué es compatible
La página usa un compilador Clang/LLVM 21 auténtico, compilado para WebAssembly por el proyecto YoWASP. Compila tu código fuente en un programa WebAssembly (WASI) que ejecuta el navegador. El comando que ejecuta equivale a:
clang++ main.cpp -std=c++20 -O2 -Wall -fno-exceptions -o main.wasm
- C++20:
auto, lambdas,forbasado en rangos, enlaces estructurados (structured bindings),constexpr, conceptos e inicializadores designados. - La biblioteca estándar de libc++:
vector,string,map,unordered_map,set,algorithm,numeric,iostream,sstream,iomanip,optionaly el resto de contenedores y algoritmos. - Los diagnósticos propios de Clang, mostrados tal como los da el compilador con
main.cpp:line:column(línea:columna), incluidos los errores de plantillas y las advertencias de-Wall. - Si
maindevuelve un valor distinto de cero, se indica como El proceso terminó con el código N.
Por qué las excepciones están desactivadas
Las excepciones de C++ necesitan en WebAssembly un soporte extra en tiempo de ejecución que esta cadena de herramientas para el navegador no ofrece, así que el código se compila con -fno-exceptions. Por eso, try, throw y catch no son compatibles, y el código que los usa no compila. Las funciones de la biblioteca que normalmente lanzarían una excepción, como std::stoi con una entrada incorrecta o .at() con un índice fuera de rango, tampoco se pueden capturar aquí. Comprueba la entrada antes de convertirla, compara los índices con size() o devuelve un std::optional para indicar un fallo:
#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;
}
Otras limitaciones
- Sin hilos:
std::thread,std::asyncy pthreads no están disponibles. - Sin red, sin
fork/execy sin un sistema de archivos real, así questd::ifstreamno puede leer archivos de tu ordenador. Usa stdin en su lugar. - Sin bibliotecas gráficas ni de interfaz como Qt, SFML u OpenGL. La salida es solo texto.
- No hay bibliotecas de terceros instaladas, como Boost. Todo tiene que estar en un único archivo
main.cpp.
C++ moderno en unas pocas líneas
El programa inicial muestra las expresiones idiomáticas que hacen que el C++ moderno sea más corto que el código de los libros de texto antiguos:
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; });
- En los bucles, usa
'\n'en lugar destd::endl.endlademás vacía el flujo, lo que es más lento. - Si combinas
std::cin >> nconstd::getline, llama antes astd::cin.ignore(); si no,getlinelee el resto de la línea anterior como una cadena vacía. operator[]en unstd::mapinserta un valor por defecto cuando falta la clave. Usafindocontains(C++20) para buscar una clave sin modificar el mapa.
Preguntas frecuentes
¿Qué estándar de C++ se usa?
C++20, compilado con Clang 21 y -O2 -Wall. El código escrito para C++11, C++14 o C++17 también compila.
¿Por qué no compila mi código con try/catch?
Las excepciones están desactivadas con -fno-exceptions. Sustitúyelas por valores de retorno, std::optional o comprobaciones explícitas antes de la operación arriesgada.
¿Puedo usar bits/stdc++.h?
No. Esa cabecera es específica de GCC y no existe en libc++. Incluye las cabeceras estándar que necesites, como <iostream>, <vector> y <algorithm>.
¿Hay una versión para C?
Sí, el compilador de C online usa el mismo Clang en modo C17. También puedes ver todos los compiladores online del sitio.
Actualizado