我有一个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 ++向导的朋友提供的。
5
有点晚了,但是我写了一个关于C ++ C包装的小方法:teddy.ch/c
—
Teddy