Есть ли способ компилировать код C ++ в C? - PullRequest
18 голосов
/ 19 февраля 2011

У меня есть программа, которая настраивается пользователем с использованием классов C ++, и этот же класс следует использовать для настройки программы, которая может использовать только подмножество C99 (Open CL Language).

Итак, мой вопрос: есть ли способ компилировать C ++ в C-Code?

Открытый код был бы великолепен!

Ответы [ 4 ]

18 голосов
/ 19 февраля 2011

Вы можете использовать clang C ++ для создания байт-кода llvm и использовать llc для передачи кода C, см. llc doc , особенно параметр c. Оба с открытым исходным кодом, с BSD-подобными лицензиями.

16 голосов
/ 19 февраля 2011

FAQ по C ++ имеет список возможностей: Возможно ли преобразовать C ++ в C? .

Короче говоря, это говорит о том, что вы не можете ожидать, что это даст вам особенно читаемый код. Подумайте о сложностях; множественное наследование, разрешение виртуальных функций, шаблоны, перегрузка операторов и т. д. и т. д. Нет clean краткого способа выразить эти понятия в чистом C. Если все, что вам нужно, это компилируемый C, то тогда это, вероятно, путь.

10 голосов
/ 19 февраля 2011

Компилятор Comeau, похоже, способен это сделать. From Wikipedia"Вместо того, чтобы непосредственно создавать исполняемый файл, Comeau C / C ++ выводит код C и требует отдельного компилятора C для создания окончательной программы."

Хотя я никогда не пробовал.

1 голос
/ 09 октября 2017
  1. Comeau Computing предлагает компилятор на основе внешнего интерфейса Edison Design Group, который выводит код C.
  2. LLVM - это загружаемый компилятор, который испускает C-код. Смотрите также здесь и здесь. Вот пример преобразования C ++ в C через LLVM.
  3. Cfront, оригинальная реализация C ++, выполненная Бьярном Страуструпом и другими сотрудниками AT & T, генерирует C-код. Однако у него есть две проблемы: получить лицензию было трудно с середины 90-х годов, когда она начала проходить через лабиринт смен владельцев, и в то же время разработка прекратилась, поэтому она не получает исправлений ошибок и не поддерживает никаких новых языковых функций (например, исключения, пространства имен, RTTI, шаблоны элементов).
  4. Вопреки распространенному мифу, на момент написания этой статьи не существует версии g ++, которая переводит C ++ в C. Такая вещь кажется выполнимой, но я не знаю, что кто-то на самом деле это сделал (пока).

http://www.cs.technion.ac.il/users/yechiel/c++-faq/convert-to-c.html

...