Как пользоваться онлайн-компилятором C
- Напишите или вставьте в редактор программу на C с функцией
main. Кнопка Сбросить пример возвращает стартовую программу. - Если программа читает ввод через
scanf,getcharилиfgets, перед запуском введите данные в поле Ввод (stdin) под панелью вывода. - Нажмите кнопку Запустить или сочетание Ctrl + Enter (⌘ + Enter на Mac). Код сначала компилируется, затем выполняется, и оба этапа выводят сообщения на панель Результат.
- В списке Ограничение времени выберите 5, 15 или 60 секунд. Бесконечный цикл прерывается, когда лимит исчерпан, а кнопка Остановить сразу завершает запуск.
При первом запуске загружается компилятор — около 30 МБ. Браузер кэширует его, и после этого типичная программа компилируется за доли секунды. Кнопки Копировать и main.c сохраняют исходный файл, A− и A+ меняют размер текста, кнопка раскладки располагает редактор и вывод рядом или друг под другом, а Полноэкранный режим (Ctrl/⌘ + Shift + F, выход — Esc) даёт больше места.
И компиляция, и выполнение происходят прямо в вашем браузере. Ваш код никогда не отправляется на сервер. Редактор хранит вашу последнюю программу в локальном хранилище браузера — и больше нигде.
Как это работает и что поддерживается
Это настоящий компилятор, а не интерпретатор, который имитирует C. Страница запускает Clang/LLVM 21, который сам скомпилирован в WebAssembly проектом YoWASP. Clang превращает main.c в программу WebAssembly (WASI), которую затем выполняет ваш браузер. Флаги компилятора:
clang main.c -std=c17 -O2 -Wall -lm -o main.wasm
- C17 с включённой оптимизацией (
-O2) и основными предупреждениями (-Wall). - Стандартная библиотека C из wasi-libc:
stdio.h,stdlib.h,string.h,ctype.h,stdint.h,time.hи другие. Математическая библиотека подключена, поэтомуsqrt,powиsinизmath.hработают, и добавлять-lmсамостоятельно не нужно. - Точная диагностика: ошибки и предупреждения показываются так, как их выводит Clang, с позициями
main.c:line:column. - Коды завершения: если
mainвозвращает значение, отличное от 0, вывод заканчивается строкой Процесс завершился с кодом N.
Ограничения песочницы браузера:
- Нет потоков.
pthread.hнедоступен. - Нет сокетов и доступа к сети, нет
forkиexec. - Нет настоящей файловой системы. Открыть файлы на компьютере нельзя, поэтому используйте stdin или данные в исходном коде.
- Нет графических библиотек и библиотек интерфейса, таких как SDL, OpenGL или
conio.h/graphics.h. Вывод — обычный текст.
Типичные ошибки в C, которые помогает найти компилятор
Проверяйте, что возвращает scanf. Функция возвращает количество прочитанных значений, а не само значение. Если поле stdin пустое или там текст вместо ожидаемого числа, переменная сохраняет прежнее значение, которое может оказаться мусорным. Стартовая программа показывает безопасный шаблон:
int n;
if (scanf("%d", &n) != 1) {
fprintf(stderr, "expected a number\n");
return 1; /* reported as exit code 1 */
}
Согласуйте спецификаторы формата printf с типами. Используйте %d для int, %ld для long, %lld для long long, %zu для size_t, %f для double и %c для символа. С -Wall Clang предупреждает о несоответствии, например при выводе double через %d, поэтому читайте предупреждения, даже если программа работает.
Следите за переполнением целых чисел. Максимальное значение 32-битного int — 2 147 483 647, а переполнение знаковых чисел в C — неопределённое поведение. С -O2 оптимизатор может считать, что его никогда не бывает, поэтому переполняющийся цикл может вести себя странно, а не просто циклически переходить через границу диапазона. Для факториалов, больших сумм и произведений используйте long long (или int64_t из stdint.h).
long long f = 1;
for (int i = 2; i <= 20; i++) f *= i;
printf("20! = %lld\n", f); /* 2432902008176640000 */
#include, например stdlib.h для malloc или string.h для strlen.Часто задаваемые вопросы
Какой компилятор и стандарт C здесь используются?
Clang 21 (LLVM) в режиме C17 с флагами -O2 -Wall. Большая часть кода, написанного для GCC, компилируется без изменений, если он придерживается стандартного C и не использует платформенно-зависимые заголовки.
Мой код куда-нибудь загружается?
Нет. Сам компилятор работает в вашем браузере, поэтому исходный код, скомпилированная программа и её вывод остаются на вашем устройстве.
Как передать программе входные данные?
Введите их в поле stdin до нажатия кнопки «Запустить». Значения можно разделять пробелами или переводами строк — так же, как при вводе в терминале. Когда входные данные заканчиваются, scanf возвращает EOF.
Почему программа останавливается с сообщением об ограничении времени?
Она работала дольше выбранного лимита, что обычно указывает на бесконечный цикл. Проверьте условие цикла или выберите 60 с для действительно долгих вычислений.
Можно ли здесь компилировать C++?
Воспользуйтесь онлайн-компилятором C++, который запускает тот же Clang в режиме C++20. Для других языков посмотрите все онлайн-компиляторы.
Обновлено