2010-11-18 216 views
30

我有一个外部提供的.cpp文件。它是C兼容代码和一些C++的混合体。 C++代码只是C的一个包装,以利用C++特性。强制gcc编译.cpp文件为C

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

有什么办法可以强制gcc把这个文件当作C文件吗?我尝试过使用例如--std=c99,但是这正确地产生了C99对C++无效的错误。

将文件重命名为.c的作品,但如果可能的话,我想避免这种情况,因为它是外部提供的,并且将它作为原始副本保留会很好。

谢谢!

+0

有时候我看到SO问题。我只想尖叫一个大RTFM! 'man gcc'。对于这个问题的国王来说,实际上花费的时间比写这个问题要少。 – log0 2010-11-18 15:21:15

+17

我有同样的问题,因为我想编译一个.cpp文件中的纯C代码......显然,我是一个关于C. RTFM的初学者!那么这不是一个好建议。 gcc手册页是11.000行,如果你不知道要找什么,那么在那里找到一个解决方案是很难的。 – mort 2011-11-04 08:05:30

回答

51

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

+1

有多尴尬,我一定要翻过去!非常感谢,所有回答的人都一样。 – ralight 2010-11-18 15:23:45

10

编译Foo.cpp中为C文件,你可以创建一个名为foo.c的一个新的文件,并把下面作为其全部内容:

#include "foo.cpp" 

现在编译的foo.c代替foo.cpp

我们已经使用了这种方式(编译一个.c文件为C++),以便在保存其长达十年之久的CVS历史记录时,在某些文件中开始使用C++功能。此外,我们使用每个平台的本机编译器构建,而不仅仅是GCC,所以我们不必为六个编译器找到-x等效命令,然后让我们的构建系统仅将该命令应用于某些文件。

+0

作为魅力和最快的解决方案,我认为可能。 – Mischo5500 2016-01-18 21:36:00