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

Fra*_*lea 7 c c++

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

Oli*_*rth 5

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

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


Pat*_* B. 5

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

extern "C" {
    int global;
}
Run Code Online (Sandbox Code Playgroud)

在头文件和与

extern "C" int global = 20; 
Run Code Online (Sandbox Code Playgroud)

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

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

class C 
{
public: 
     c(int);
     int get();
};
Run Code Online (Sandbox Code Playgroud)

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

extern "C" void * createC(int i)
{
     return (void *) new C(i);
}

extern "C" int Cget(void *o)
{ 
     return ((C *)o)->get();
}
Run Code Online (Sandbox Code Playgroud)


jal*_*alf 5

是否可以选择相反的方式?C++ 代码可以包含 C 头文件并直接链接到 C 库(并且 C 代码通常可以编译为 C++,只需很少或没有更改),但从 C 使用 C++ 需要多加小心。

您不能从 C 文件中包含 C++ 头文件并期望将其编译为 C。

因此,您需要做的是从您的 C++ 代码中公开一个与 C 兼容的接口(所有内容都包含在extern "C". 如果你有这样的头文件,你可以简单地从你的 C 代码中包含它,并链接到 C++ 库。