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

时间:2010-11-18 15:10:14

标签: c++ c gcc compilation

我有一个外部提供的.cpp文件。它是C兼容代码和一些C ++的混合体。 C ++代码只是C的一个包装器,可以利用C ++的功能。

它使用#ifdef __cplusplus宏来保护C ++代码,这很棒。不幸的是,如果我尝试使用gcc进行编译,它会因为文件结束而将其视为C ++。我知道gcc和g ++之间的区别 - 我不想编译成C ++。

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

将文件重命名为.c有效,但我希望尽可能避免这种情况,因为它是外部提供的,并且保留为原始副本会很好。

谢谢!

2 个答案:

答案 0 :(得分:56)

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

$ 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 ++)

答案 1 :(得分:12)

要将 foo.cpp 编译为C文件,您可以创建一个名为 foo.c 的新文件,并将以下内容作为其全部内容:

#include "foo.cpp"

现在编译 foo.c 而不是 foo.cpp

我们使用它来反过来(编译 .c 文件作为C ++),以便开始在某些文件中使用C ++功能,同时保留其长达十年的CVS历史记录。此外,我们使用每个平台的本机编译器构建,而不仅仅是GCC,因此我们不必为六个编译器找到-x等效命令,然后使我们的构建系统仅将该命令应用于某些文件