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

8

只是出于好奇:有没有一种方法可以在C项目中使用C++文件? 我的意思是能够从头文件和库访问函数并将其用于已解决问题的自己的项目中。

6个回答

5
如果您将函数、变量和结构体外部化,可以使用:
extern "C" {
    int global;
}

在头文件和使用中。
extern "C" int global = 20; 

在您的C++代码中,它可以被C代码使用。同样的规则也适用于函数。
您甚至可以调用具有适当原型的方法。例如:
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();
}

5

5

是否可以反过来使用?C++代码可以直接包含C头文件并链接到C库中(通常情况下不需要或只需要很少的修改即可将C代码编译为C++),但是从C中使用C++需要更加小心。

您不能从C文件中包含C++头文件并指望将其编译为C。因此,您需要从C++代码中公开一个C兼容的接口(在这个接口中,所有内容都被包装在extern "C"中,并且不使用任何C++特定的特性)。如果您有这样的头文件,您可以直接从C代码中包含它,并链接到C++库中。


2

最简单的方法可能就是使用C++编译器编译您的C文件。绝大部分代码都是兼容的,并且您可以免费使用C ++标头。


1
为什么要踩?虽然这可能不是提问者喜欢的方法,但我没有看到回答中有任何错误或明显的不良建议。 - jalf
我想不是这样的,但我们中喜欢C语言的人往往会被建议“将其编译为C ++”,然后又因为使用C风格而受到批评。让两种语言之间逐渐减少的兼容性保持现状吧。这两种语言是不同的,不应该假装相同。 - Matt Joiner
你个人的语言偏好不应成为贬低其他语言答案的理由。 - jalf

0
如果您为C++库提供了C API,则可以使用它。只需在单独的头文件中定义C API(无法在C文件中使用带有C++代码的头文件)。ICU项目就是这样做的,它在内部使用C++,但同时提供C和C++ API。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接