出于好奇:有没有办法在C项目中使用C ++文件?对于文件,我的意思是能够从头文件和库访问函数,并在您自己的项目中使用它们来解决已经解决的问题。
答案 0 :(得分:5)
是的,如果你小心的话,可以混合使用C和C ++。具体取决于您正在使用的编译器等。
在C ++ FAQ中有一整章关于它:http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html。
答案 1 :(得分:5)
如果使用
外部化函数,变量和结构extern "C" {
int global;
}
标题文件中的和
extern "C" int global = 20;
在您的C ++代码中,它可以从C代码中使用。同样的规则适用于功能。
您甚至可以使用适当的原型调用方法。 E.g:
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();
}
答案 2 :(得分:4)
选择相反的方式吗? C ++代码可以包含C头并直接链接到C库(C代码通常可以编译为C ++,几乎没有变化),但是使用C语言中的C ++需要更多的关注。
您不能在C文件中包含C ++标头,并希望将其编译为C.
所以你要做的就是从你的C ++代码中公开一个C兼容的接口(一个包含在extern "C"
中的一个标头,它不使用特定于C ++的特性)。如果你有这样的标题,你可以简单地从你的C代码中包含它,并链接到C ++库。
答案 3 :(得分:1)
可能最简单的事情就是用C ++编译器编译C文件。绝大多数代码都是兼容的,您将能够免费使用C ++标头。
答案 4 :(得分:0)
如果为C ++库提供C API,则可以使用它。只需在单独的头文件中定义C API(不能在C文件中使用带有C ++代码的头文件)。 ICU项目就是这样,它在内部使用C ++,但同时提供C和C ++ API。
答案 5 :(得分:0)