Подтвердить что ты не робот

Компилятор только для интерфейса С++ (конвертировать С++ в C)

В настоящее время я управляю некоторым кодом на С++, который работает на нескольких платформах из одного исходного дерева (Win32, Linux, Verifone CC-терминалы, MBED и даже Nintendo GBA/DS). Однако мне нужно создать приложение, нацеленное на встроенную платформу, для которой нет компилятора С++ (только C). Я помню, что многие из ранних компиляторов С++ были только передними строками на существующих компиляторах C (например, для колонок, например MSC). Есть ли такие компиляторы 'frontend' С++, которые используются сегодня, которые будут генерировать C-код.

                      Tools            Platform
                      -----------      ------------

                ______Visual C++ _____ WIN32
               /
              /_______MBED (ARM)_______MBED (ARM dev board).
             /
            /_________GCC (x86)________Linux
           /
Source____/___________GCC (ARM)________GBA/DS
          \
           \__________SDA______________Verifone Verix CC Terminals
            \
             \________ARM SDT__________Verifine VerixV CC terminals
              \
               \______????_____________Renases M8/16/32.
                \
                 \____????_____________Z8 family.

Последние две платформы у меня есть хорошие компиляторы C, но не С++.

Как вы можете видеть, я поддерживаю большое количество платформ, и я разделяю большую часть кода библиотеки (и некоторый код приложения).

4b9b3361

Ответ 1

Если вы используете LLVM, llvm-g++ скомпилирует ваш код на С++ в LLVM-биткод, а llc имеет бэкэнд, который преобразует бит-код в C.

Вы можете написать такие команды:

llvm-g++ -emit-llvm -c foo.cpp -o foo.o
llc -march=c <foo.o >foo.c

Ответ 3

Невозможно помочь с Z8, но семейство Renesas M16C/M32C имеет GCC в эти дни - см. http://www.kpitgnutools.com/ для предварительно скрещенного креста toolchain, размещенный в Windows. Я еще не использовал его сам, но может быть лучшим вариантом, чем сторонний интерфейс С++, особенно если ваш код уже нацелен на GCC на других платформах.

Ответ 4

Comeau С++ генерирует C в качестве своего вывода, и они, похоже, очень счастливы переносить его для работы с различными компиляторами на заднем плане, хотя я не уверен в точном ценообразовании для этого.

Если вы хотите немного больше использовать "свой собственный" подход, вы можете купить лицензию на компилятор EDG С++. Он обычно используется в качестве интерфейсного (например, компанией "Комо" и Intel), но я считаю, что по мере его доставки он включает в себя генератор кода, который выдает C в качестве вывода. Его лицензирование больше ориентировано на поставщиков компиляторов, поэтому лицензия дает вам много прав, но довольно дорого.

Ответ 5

Устаревший, но, возможно, вы хотите попробовать cfront?

Я оставлю это для информации - cfront не поддерживает исключение.

Ответ 6

Из того, что я понял, поддержка С++ в gcc для r8c/m16c/r32c не достаточно зрелая и достаточно хороша для производственного кода. Но для r8c/m16c/m32c/r32c существует хотя бы один компилятор, поддерживающий встроенный С++, и это IAR, я думаю, Tasking также поддерживает встроенный С++ на m16c.