Hatred's Log Place

DON'T PANIC!

Sep 19, 2013 - 3 minute read - programming c++

Онлайн компиляторы C/C++ и не только

Иногда нужно быстро проверить работоспособность какой-то идеи или алгоритма. Хорошо, когда у вас Linux и какая-то система из семейства Unix с установленным компилятором (имхо, в 90% случаев это будет правдой), вам просто нужно открыть консоль вызвать vim/emacs/joe/mcedit/etc набросать программку и вызвать компилятор. Но иногда вы в гостях/командировке/интернет-кафе, в общем тогда, когда компилятора нет под рукой, но есть доступ в интернет. Тут помогут онлайн-компиляторы.

Отправной точкой можно взять ресурсы:

Из перечисленных там, мне понравились нижеперечисленные.

Лидеры

Лидеры моего внутреннего рейтинга. На основе развития за все годы существования этой заметки.

  • https://wandbox.org/
    • Мой фаворит
    • Плюсы:
      • Самые свежие версии компиляторов (см. ниже) и, соответственно, самые свежие версии стандартов.
      • Gcc/Clang/Zapcc на выбор и много вариантов версий
      • Удобный выбор версий стандарта (C++)
      • Доступен Boost разных версий и дополнительные библиотеки типа Sprout и MessagePack
      • Можно задать дополнительные опции компилятору (“Compiler options”)
      • Уже можно задать опции командной строки для приложения (“Runtime options”)
      • Можно передать программе STDIN
      • Можно создавать дополнительные текстовые файлы (например для программ, читающих из файлов). При этом, можно хитро извернуться и использовать WandBox как IDE: эти файлы могут быть исходниками, проосто печислите их в параметрах компилятора ;-)
      • Несколько языков
      • Можно шарить код
      • Автоматически сохраняет код между запусками браузера
      • Быстрый запуск по Ctrl+Enter
    • Минусы
      • Нет студийного компилятора
  • http://coliru.stacked-crooked.com
    • Плюсы:
      • C++17, можно указать -std=c++2a для pre-C++20

      • Последняя версия компилятора

      • Можно выбрать компилятор (по крайней мере gcc 4.6 там есть)

      • Можно задать параметры сборки

      • Автоматически сохраняет код между запусками браузера

      • Можно использовать для шаринга кода (внизу кропка Share)

      • Можно передать параметры программе через аргументы командной строки

      • Можно передать программе STDIN используя трюк Shell:

        g++ -std=c++2a -O2 -Wall -pedantic -pthread main.cpp && ./a.out << EOF
        Hey! I am stdin!
        EOF
        
      • Много шоркатов

    • Минусы:
      • Неудобно выбирать копилятор - только методом перебора :)
      • Язык только (?) C/C++
  • http://gcc.godbolt.org/ - тут укажу один минус сразу: он только компилирует, но не выполняет код и отображает ассемблерный листинг, что удобно для анализа всяких оптимизаций.
    • Плюсы:
      • Много разных компиляторов и их версий: gcc (4.4-4.8), arm-gcc (4.5-4.6), avr-gcc (4.5), mps430-gcc (4.5), clang (3.0), icc (13.0.1)
      • Показывает ассемблерный выход
      • Можно задать параметры компиляции
      • Можно шарить код
      • Мегатулза для анализа сгенерированного кода
    • Минусы:
      • Собственно указан выше, остальные рассматривать даже не приходится

Прочие

Которыми раньше пользовался, но которые по каким-то причинам ушли из моих фаворитов.

  • http://cpp.sh/
    • Плюсы:
      • Короткое и лаконичное имя :-)
      • C++98, C++11, C++14 - по выбору (GCC 4.9.2)
      • Различные уровни оптимизации: O0, O1, O2, O3
      • Поддержка предупреждений: Wall, Wextra, Wpedantic
      • Boost 1.55 (больше никто не предоставляет)
      • Можно шарить код
      • Ввод через стандартный ввод: интерактивный (этого нет ни у кого больше) и текст
      • Сразу большое окно редактора
    • Минусы
      • Только C++
      • Нет работы с файлами
      • Не понимает завершения процесса по сигналу
  • http://ideone.com
    • Плюсы:
      • C++14 стандарт (компилятор gcc 8.2 и clang 8.0)
      • Можно шарить код + оставить аннотацию к нему (нажать “More options”)
      • Можно задать данные которые отошлются на STDIN программы
    • Минусы:
      • Нельзя задать параметры сборки
      • Нельзя передать параметры командной строки
      • Других стандартов C++ нет (С++98/03, C++11, C++17, C++20)