在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 ++ 。