Как пользоваться онлайн-компилятором C++
- Введите или вставьте код на C++ в редактор. В нём должна быть функция
int main(). Кнопка Сбросить пример возвращает стартовую программу. - Если программа читает данные из
std::cinилиstd::getline, сначала введите их в поле Ввод (stdin). - Нажмите кнопку Запустить или Ctrl + Enter (⌘ + Enter на Mac). Страница компилирует
main.cpp, показывает диагностические сообщения, если они есть, и затем запускает программу. - В поле Ограничение времени выберите 5, 15 или 60 секунд. Если выполнение длится дольше, программа останавливается. Кнопка Остановить завершает её сразу.
При первом запуске страница скачивает набор инструментов Clang — примерно 30 МБ, — который затем кэшируется в браузере. После этого компиляция типичной программы занимает гораздо меньше секунды. Кнопки Копировать и main.cpp позволяют сохранить код, A−/A+ меняют размер текста, кнопка макета переключает панели между расположением рядом и друг под другом, а Полноэкранный режим (Ctrl/⌘ + Shift + F, выход — Esc) отдаёт редактору всё окно.
Ничего не загружается на сервер. И компилятор, и ваша программа работают в вашем браузере, а последняя версия кода сохраняется только в локальном хранилище браузера.
Что поддерживается
Страница использует настоящий компилятор Clang/LLVM 21, собранный для WebAssembly проектом YoWASP. Он компилирует исходный код в программу WebAssembly (WASI), которую выполняет браузер. Выполняемая команда равнозначна такой:
clang++ main.cpp -std=c++20 -O2 -Wall -fno-exceptions -o main.wasm
- C++20:
auto, лямбды, циклforпо диапазону, структурированные привязки,constexpr, концепты и назначенные инициализаторы. - Стандартная библиотека libc++:
vector,string,map,unordered_map,set,algorithm,numeric,iostream,sstream,iomanip,optionalи остальные контейнеры и алгоритмы. - Собственная диагностика Clang выводится в точности так, как её выдаёт компилятор, в формате
main.cpp:line:column, включая ошибки шаблонов и предупреждения-Wall. - Ненулевой код возврата из
mainотображается как Процесс завершился с кодом N.
Почему отключены исключения
Исключениям C++ в WebAssembly нужна дополнительная поддержка среды выполнения, которой нет в этом наборе инструментов для браузера, поэтому код компилируется с флагом -fno-exceptions. В результате try, throw и catch не поддерживаются, и код, который их использует, не компилируется. Функции библиотеки, которые обычно выбрасывают исключения, например std::stoi при некорректных данных или .at() с индексом вне диапазона, здесь тоже нельзя перехватить. Проверяйте входные данные перед преобразованием, сравнивайте индексы с size() или возвращайте std::optional, чтобы сообщить об ошибке:
#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;
}
Другие ограничения
- Нет потоков:
std::thread,std::asyncи pthreads недоступны. - Нет сети, нет
fork/execи нет настоящей файловой системы, поэтомуstd::ifstreamне может читать файлы с вашего компьютера. Используйте вместо этого stdin. - Нет графических библиотек и библиотек интерфейса, таких как Qt, SFML или OpenGL. Вывод только текстовый.
- Сторонние библиотеки, например Boost, не установлены. Весь код должен находиться в одном файле
main.cpp.
Современный C++ в нескольких строках
Стартовая программа показывает приёмы, благодаря которым современный C++ короче кода из старых учебников:
std::map<std::string, int> ages{ {"Ada", 36}, {"Linus", 54} };
for (const auto& [name, age] : ages) // структурированные привязки
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; });
- В циклах используйте
'\n'вместоstd::endl.endlещё и сбрасывает буфер потока, а это медленнее. - Если вы сочетаете
std::cin >> nиstd::getline, сначала вызовитеstd::cin.ignore(), иначеgetlineпрочитает остаток предыдущей строки как пустую строку. operator[]уstd::mapвставляет значение по умолчанию, если ключа нет. Чтобы найти ключ, не меняя map, используйтеfindилиcontains(C++20).
Часто задаваемые вопросы
Какой стандарт C++ используется?
C++20; код компилирует Clang 21 с флагами -O2 -Wall. Код, написанный для C++11, C++14 или C++17, тоже компилируется.
Почему мой код с try/catch не компилируется?
Исключения отключены флагом -fno-exceptions. Замените их возвращаемыми значениями, std::optional или явными проверками перед рискованной операцией.
Можно ли использовать bits/stdc++.h?
Нет. Этот заголовок есть только в GCC и отсутствует в libc++. Подключайте нужные стандартные заголовки, например <iostream>, <vector> и <algorithm>.
Есть ли версия для обычного C?
Да, онлайн-компилятор C использует тот же Clang в режиме C17. Также можно посмотреть все онлайн-компиляторы на сайте.
Обновлено