我有一个外部提供的.cpp文件。它是C兼容代码和一些C ++的混合体。 C ++代码只是C的一个包装器,可以利用C ++的功能。
它使用#ifdef __cplusplus
宏来保护C ++代码,这很棒。不幸的是,如果我尝试使用gcc进行编译,它会因为文件结束而将其视为C ++。我知道gcc和g ++之间的区别 - 我不想编译成C ++。
有什么方法可以强制gcc将此文件视为C文件?我试过用过例如--std=c99
,但这正确地产生了C99对C ++无效的错误。
将文件重命名为.c有效,但我希望尽可能避免这种情况,因为它是外部提供的,并且保留为原始副本会很好。
谢谢!
答案 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
等效命令,然后使我们的构建系统仅将该命令应用于某些文件