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

ral*_*ght 36 c c++ gcc compilation

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

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

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

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

谢谢!

Mic*_*zek 58

-x选项的gcc,可以指定它后面所有的输入文件的语言:

$ gcc -x c your-file-name.cpp
Run Code Online (Sandbox Code Playgroud)

如果您只想要特殊情况下的一个文件,您可以使用-x none关闭特殊处理:

$ gcc -x c your-filename.cpp -x none other-file-name.cpp
Run Code Online (Sandbox Code Playgroud)

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

  • 太尴尬了,我一定是翻过了它!非常感谢,同样感谢所有回答的人。 (2认同)

Rob*_*edy 12

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

#include "foo.cpp"
Run Code Online (Sandbox Code Playgroud)

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

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