代码之家  ›  专栏  ›  技术社区  ›  ralight

强制gcc将.cpp文件编译为C

  •  34
  • ralight  · 技术社区  · 14 年前

    我有一个外部提供的.cpp文件。它是C兼容代码和一点C++的混合体。C++代码只是一个围绕C的包装器,以充分利用C++的特性。

    它使用 #ifdef __cplusplus 宏保护C++代码,这很好。不幸的是,如果我尝试编译使用GCC,它将它视为C++,因为文件结束。我知道GCC和G++之间的区别——我不想编译成C++。

    有什么方法可以强制gcc将此文件视为C文件吗?我试过用e.g。 --std=c99 但是,这正确地产生了C99对C++无效的错误。

    将文件重命名为.c是可行的,但如果可能的话,我想避免这样做,因为它是外部提供的,最好保留为原始副本。

    谢谢!

    2 回复  |  直到 14 年前
        1
  •  59
  •   Michael Mrozek    14 年前

    这个 -x gcc选项允许您指定所有输入文件的语言:

    $ gcc -x c your-file-name.cpp
    

    如果你只想特例那一个文件,你可以用 -x none 关闭特殊处理:

    $ gcc -x c your-filename.cpp -x none other-file-name.cpp
    

    ( your-filename.cpp 将编译为C,而 other-file-name.cpp 将使用扩展并编译为C++

        2
  •  12
  •   Rob Kennedy    14 年前

    编译 食品cpp 作为一个C文件,您可以创建一个名为 食品 并将以下内容作为其全部内容:

    #include "foo.cpp"
    

    现在编译 食品 而不是 食品cpp .

    我们已经用这个去了另一个方向(编译一个 .c.公司 文件为C++,以便在某些文件中开始使用C++特性,同时保存其长达十年的CVS历史。另外,我们使用每个平台的本机编译器来构建,而不仅仅是GCC,因此我们不必找到 -x 六个编译器的等效命令,然后使我们的生成系统仅将该命令应用于某些文件。