我有一个C++库,它提供了管理数据的各种类.我有这个库的源代码.
我想扩展C++API以支持C函数调用,以便该库可以同时与C代码和C++代码一起使用.
我使用的是GNU工具链(gcc、glibc等),所以语言和架构支持不是问题.
有什么理由不可能做到这一点吗?
有没有gotcha's个我需要注意的?
是否有与此相关的资源、示例代码和/或文档?
我还发现了其他一些事情:
- 使用下面的代码来包装C++代码需要使用的C++头文件.
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- 在C文件中不包含C文件中的"真实"C++接口.这里想PIMPL principle.在这里使用
#ifndef __cplusplus #error
有助于发现任何疯狂. - 注意在C代码中使用C++标识符作为名称
- C和C++编译器之间大小不同的枚举.如果您使用的是GNU工具链,可能不是问题,但是还是要小心.
-
对于 struct ,请遵循以下形式,以免C混淆.
typedef struct X { ... } X
然后使用指针来传递C++对象,它们只需在C中声明为 struct 体X,其中X是C++对象.
所有这些都是一个朋友在C++中的向导.