Есть ли способ скомпилировать С++ для кода C?
У меня есть программа, которая настраивается пользователем с помощью классов С++ и
тот же класс должен использоваться для настройки программы, которая
может использовать только подмножество C99 (Open CL Language).
Итак, мой вопрос:
Есть ли способ скомпилировать С++ для C-Code?
Open Source будет замечательным!
Ответы
Ответ 1
В C++ FAQ есть список возможностей: возможно ли конвертировать C++ в C? ,
Короче говоря, это говорит о том, что вы не можете ожидать, что это даст вам особенно читаемый код. Подумайте о сложностях; множественное наследование, разрешение виртуальных функций, шаблоны, перегрузка операторов и т.д. и т.д. Не существует четкого и краткого способа выразить эти понятия в чистом C. Однако если все, что вам нужно, это компилируемый C, то это, вероятно, способ идти.
Ответ 2
Вы можете использовать clang интерфейс С++ для генерации байт-кода llvm и использовать llc
для испускания кода C, см. llc doc, особенно опция c
. Оба они с открытым исходным кодом, с лицензиями BSD.
Ответ 3
Компилятор Comeau, похоже, способен это сделать. Из Wikipedia "Вместо того, чтобы напрямую создавать исполняемый файл, Comeau C/С++ выводит код C и требует отдельного компилятора C для создания финального программа".
Я никогда не пробовал, хотя.
Ответ 4
- Comeau Computing предлагает компилятор, основанный на интерфейсе Edison Design Group, который выводит C-код.
- LLVM - это загружаемый компилятор, который испускает C-код. Смотрите также здесь и здесь. Вот пример преобразования C++ в C через LLVM.
- Cfront, оригинальная реализация C++, выполненная Бьярном Страуструпом и другими в AT & T, генерирует C-код. Однако у него есть две проблемы: было трудно получить лицензию с середины 90-х годов, когда она начала проходить через лабиринт смен владельцев, и в то же время разработка прекратилась, поэтому она не исправляет ошибки и не поддерживает никаких из более новых языковых функций (например, исключения, пространства имен, RTTI, шаблоны элементов).
- Вопреки распространенному мифу, на момент написания этой статьи не существует версии g++, которая переводила бы C++ в C. Такая вещь кажется выполнимой, но я не знаю, что кто-то на самом деле это сделал (пока).
http://www.cs.technion.ac.il/users/yechiel/C++-faq/convert-to-c.html