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

时间:2011-08-12 15:46:08

标签: c++ c

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

6 个答案:

答案 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)