代码之家  ›  专栏  ›  技术社区  ›  Tim Ring

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

  •  24
  • Tim Ring  · 技术社区  · 16 年前

    我目前正在管理一些源代码树(Win32,Linux,ViFiFinCC终端,MBOD,甚至任天堂GBA/DS)在多个平台上运行的C++代码。然而,我需要构建一个应用程序,它嵌入了一个没有C++编译器(仅C)的平台。我记得很多早期的C++编译器只是在现有的C编译器(例如使用MSC的GRONKSPILL)上的前端拼接。是否有这样的“前端”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++。

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

    7 回复  |  直到 8 年前
        1
  •  40
  •   Jay Conrod    10 年前

    如果你使用 LLVM , llvm-g++ 将编译您的C++代码到LLVM位代码,以及 llc 具有将比特码转换为C的后端。

    您可以这样编写命令:

    llvm-g++ -emit-llvm -c foo.cpp -o foo.o
    llc -march=c <foo.o >foo.c
    
        2
  •  18
  •   Michael Burr    16 年前

    Comeau C++ 这样做。

        3
  •  5
  •   quietbob    16 年前

    Z8帮不上忙,但Renesas M16C/M32C家族最近有GCC——见 http://www.kpitgnutools.com/ 用于在Windows上预构建的跨工具链。还没有自己使用它,但可能是一个更好的选择比第三方C++前端,尤其是因为你的代码已经目标GCC在其他平台上。

        4
  •  2
  •   Jerry Coffin    16 年前

    C++C+生成C作为其输出,并且它们似乎非常乐意将它移植到不同的后端编译器中,尽管我不确定其确切的定价。

    如果你想多一点“滚你自己”的方法,你可以给EDG C++编译器购买许可证。它通常被用作前端(如Comeau和Intel),但我相信随着它的推出,它包含了一个代码生成器,可以产生C作为其输出。不过,它的许可更多地面向编译器供应商,所以许可证给了您很多权利,但代价相当昂贵。

        5
  •  1
  •   plinth    16 年前

    过时了,但也许你想试试 cfront ?

    我会留下这个供参考-cfront没有例外支持。

        6
  •  1
  •   henkebenke    16 年前

    对于我所理解的,在GCC中对R8C/M16C/R32 C的C++支持还不够成熟,对生产代码来说已经足够好了。但是对于R8C/M16C/M32 C/R32 C,至少有一个编译器支持嵌入式C++,也就是IAR,我认为任务也支持M16C上的嵌入式C++。

        7
  •  0
  •   Fabian le Maux    8 年前

    注意,有效的解决方案是针对llvm的 1.3 LLVM上次发布是 3.0.0 所以根本不起作用。 (我发表这篇文章是因为我已经尝试过这篇文章的解决方案,但它已经不起作用了)(也许我做了一些不好的事情)

    在我的测试中 有限责任公司不接受 不再 -三月= C 选择权。 然后回到 一点三 对我来说还不可能。 所以要注意版本。