我有一个 C++ 库,它提供了各种用于管理数据的类。我有图书馆的源代码。
我想扩展 C++ API 以支持 C 函数调用,以便该库可以同时与 C 代码和 C++ 代码一起使用。
我正在使用 GNU 工具链(gcc、glibc 等),因此语言和架构支持不是问题。
有什么理由说明这在技术上是不可能的吗?
有什么我需要注意的问题吗?
是否有与此相关的资源、示例代码和/或文档?
我发现的其他一些事情:
- 使用以下内容来包装 C 代码需要使用的 C++ 标头。
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- 将“真正的”C++ 接口保存在 C 不包含的单独头文件中。在这里考虑PIMPL 原则。在这里使用
#ifndef __cplusplus #error
东西有助于检测任何疯狂。 - 小心 C++ 标识符作为 C 代码中的名称
- C 和 C++ 编译器之间大小不同的枚举。如果您使用 GNU 工具链,这可能不是问题,但仍然要小心。
对于结构,请遵循以下形式,以免 C 混淆。
typedef struct X { ... } X
然后使用指针来传递 C++ 对象,它们只需在 C 中声明为 struct X,其中 X 是 C++ 对象。
所有这一切都是由一位 C++ 天才朋友提供的。