只是出于好奇:有没有一种方法可以在C项目中使用C++文件? 我的意思是能够从头文件和库访问函数并将其用于已解决问题的自己的项目中。
extern "C" {
int global;
}
extern "C" int global = 20;
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++ FAQ 有一个完整的章节:http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html。
是否可以反过来使用?C++代码可以直接包含C头文件并链接到C库中(通常情况下不需要或只需要很少的修改即可将C代码编译为C++),但是从C中使用C++需要更加小心。
您不能从C文件中包含C++头文件并指望将其编译为C。因此,您需要从C++代码中公开一个C兼容的接口(在这个接口中,所有内容都被包装在extern "C"
中,并且不使用任何C++特定的特性)。如果您有这样的头文件,您可以直接从C代码中包含它,并链接到C++库中。
最简单的方法可能就是使用C++编译器编译您的C文件。绝大部分代码都是兼容的,并且您可以免费使用C ++标头。