Меню


Site Logo

О проекте: Проект по конверсии кода, написанного с применением новых конструкций, внесенных в C++ 11, в код, совместимый с C++ 98.

Зачем это нужно?

При кросс-платформенной разработке на языке C++ часто возникает головная боль с попыткой получить единую кодовую базу. Традиционное решение — туча макросов, проверяющих версию C++ и перекрывающих реализацию фрагментов кода для разных по возможностям компиляторов, очень легко замусоривает код. Поэтому обладая чистым, отлаженным кодом, написанным с применением весьма полезных функций C++ 11, таких как range-based for, enum-классы, спецификаторов delete, default, override и т.д., и задачей заставить его собраться с применением например GCC 4.3.4 весьма грустно переписывать его на C++ 98. Конечно, может возникнуть вопрос, а почему бы не взять просто более новый GCC, например 5.4? К сожалению, это возможно не всегда. Например, если имеешь дело с производителем POS-терминала и его Platform SDK, содержащим конкретную версию GCC и не намеренного ничего менять. Конвертор явился дешевой альтернативой варианту переписать все места, где в коде применялся C++ 11, позволившей сохранить единую кодовую базу для всех платформ, использующую возможности, включенные C++ 11. Интегрированный через интерфейс командной строки в процедуру автоматической сборки он позволил сохранить большой объем человеко-часов.

Что умеет?

  • Конвертировать параметрические циклы в простые циклы for с выведением авто-типов.
  • Внедрять в код эмуляцию перечислений со строгой типизацией (enum-классов).
  • Эмулировать спецификаторы delete, default, override, final.
  • Вычитывать информацию из заголовочных файлов для выведения типов в процессе конверсии циклов.
  • Устранение неподдерживаемых #pragma (например #pragma region, #pragma endredion), приводящих к выводу замусоривающих логи сборки предупреждений компилятора.

Как правильнее всего использовать?

Самым правильным видится интеграция вызова этого конвертора в процесс автоматической сборки. Все может выглядеть, например так:

  • автоматический сборщик выкачивает из репозитория исходный код для сборки
  • если платформа такая, что компилятор старый и что-то не поддерживает, то запускается конвертор, изменяющий код в рабочей копии
  • запускается компиляция

Как запустить?

Конвертер запускается с командной строки. Предусмотрено два варианта запуска:

Запуск в режиме конверсии одного файла:

ccc.exe <source> <target>

где <source> — файл для преобразования, <target> — имя файла в который следует записать результат.

Запуск в режиме конверсии всех файлов в папке:

ccc.exe <folder>

где <folder> — папка для преобразования (конвертер ищет в ней и во всех ее подкаталогах файлы *.h и *.cpp, конвертирует код и заменяет содержимое).

Можно ли использовать в закрытых проектах?

Программа раздается бесплатно, использовать можно.

Роль в проекте: автор концепции и реализации.

Тип проекта: научно-исследовательский, бесплатно-распространяемый.

Состояние: активен, выпущена версия, эксплуатируется.

Участие в проекте: c 2016 года.

Операционные системы: Windows, Linux.

Правообладатель и распространитель: Куриленко И.Е.