仅 C++ 前端编译器(将 C++ 转换为 C)

标签 c++ c embedded cross-platform

我目前正在管理一些从单一源代码树(Win32、Linux、Verifone CC 终端、MBED 甚至 Nintendo GBA/DS)在多个平台上运行的 C++ 代码。但是,我需要构建一个针对没有 C++ 编译器(仅限 C)的嵌入式平台的应用程序。我记得许多早期的 C++ 编译器只是基于现有 C 编译器的前端(例如 Glockenspiel 使用 MSC)。现在有没有这样的“前端”C++ 编译器可以生成 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 编译器,但没有 C++。

如您所见,我支持多种平台,并且共享大量库代码(和一些应用程序代码)。

最佳答案

如果您使用 LLVM , llvm-g++会将您的 C++ 代码编译为 LLVM 位码,并且 llc有一个将位码转换为 C 的后端。

你可以这样写命令:

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

关于仅 C++ 前端编译器(将 C++ 转换为 C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1833484/

相关文章:

c++ - 如何在继承中访问同名成员

c - 如何计算 .c 文件中的 ifs?

c - 累计和溢出

python - Numpy CAPI PyArray_新 Visual Studio 警告 C4055

linker - GNU ld 删除部分

embedded - 与 stm32 接口(interface)的网络摄像头

c - QR算法实现3x3定点

c++ - 枚举变量作为动态模板参数

c++ - 关于 C 中的 C++ 类访问/操作

c++ - 修改后的Fibonacci C++产生较大的负数