在C项目中使用C ++文件

出于好奇:有没有办法在C项目中使用C ++文件? 对于文件,我的意思是能够从头文件和库访问函数,并在您自己的项目中使用它们来解决已经解决的问题。

是的,如果你小心的话,可以混合使用C和C ++。 具体取决于您正在使用的编译器等。

在C ++ FAQ中有一整章关于它: http : //www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html 。

如果你用你的函数,变量和结构外部化

extern "C" { int global; } 

在头文件和与

 extern "C" int global = 20; 

在您的C ++代码中,它可以从C代码中使用。 同样的规则适用于function。

您甚至可以使用适当的原型调用方法。 例如:

 class C { public: c(int); int get(); }; 

.cpp中的C-Wrapper可能如下所示:

 extern "C" void * createC(int i) { return (void *) new C(i); } extern "C" int Cget(void *o) { return ((C *)o)->get(); } 

是否可以选择相反的方式? C ++代码可以包含C头并直接链接到C库(C代码通常可以编译为C ++,几乎没有变化),但是使用C语言中的C ++需要更多的关注。

您不能在C文件中包含C ++标头,并希望将其编译为C.

因此,您需要做的是从C ++代码中公开一个C兼容的接口(一个包含在extern "C"的标头,并且它不使用特定于C ++的特性)。 如果你有这样的标题,你可以简单地从你的C代码中包含它,并链接到C ++库。

可能最简单的方法是使用C ++编译器编译C文件。 绝大多数代码都是兼容的,您将能够免费使用C ++头文件。

如果为C ++库提供C API,则可以使用它。 只需在单独的标头中定义C API(您不能在C文件中使用带有C ++代码的标头)。 ICU项目就是这样做的,它在内部使用C ++,但同时提供C和C ++ API。

另请参见如何混合使用C和C ++ 。