【发布时间】:2022-01-04 21:43:45
【问题描述】:
我有一个 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 principle。在这里使用
#ifndef __cplusplus #error的东西有助于发现任何疯狂。 - 小心 C++ 标识符作为 C 代码中的名称
- C 和 C++ 编译器之间的枚举大小不同。如果您使用 GNU 工具链,这可能不是问题,但还是要小心。
-
对于结构,请遵循以下格式,以免 C 混淆。
typedef struct X { ... } X 然后使用指针来传递 C++ 对象,它们只需在 C 中声明为 struct X,其中 X 是 C++ 对象。
所有这一切都是由一位 C++ 天才朋友提供的。
【问题讨论】:
-
有点晚了,但我写了一篇关于 C++ 的 C 包装器的小方法:teddy.ch/c++_library_in_c