c++ - 具有 extern #define 和 typedef 结构的静态库

标签 c++ c static-libraries typedef declaration

我正在尝试制作一个静态库,其中库的某些方面可以在外部定义(在已编译的库代码之外)。

对于函数定义,我可以在库中使用 extern void foo() 声明 毫无问题地编译库,然后在引用静态库的代码。

我还想制作一些静态库中的#define valuestypedef structs,可以在外部进行编辑。

如果我删除了#defines 或typedef 结构声明,那么我将无法编译库。

所有使用 extern 的尝试也都失败了。

这可能吗?如果是这样,我该怎么做?

问候, 约翰。

最佳答案

#define 是在编译时处理的,因此您不能在(已编译的)库之外使它们可编辑。

typedefstruct 定义内存布局和这些数据类型的偏移量。这些在编译时处理以在编译代码中插入正确的偏移量以访问成员,因此也在编译时处理并且不能在(编译的)库之外编辑。

您可以将库函数 void * 指针传递给您的数据结构,并传递库函数来处理这些外部定义的数据类型。例如:

void genericSort(void *ArrayToSort, int (*cmp)(void *, void *));

在这里,您向库函数传递一个要排序的数组和一个比较两个元素的函数,而库对这个数组包含的内容一无所知。

关于c++ - 具有 extern #define 和 typedef 结构的静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35286901/

相关文章:

php - 编译 swig 界面后缺少符号

c++ - 使用 C++ 和 opencv 查找最左、最右、最高和最下的蓝色像素

c++ - : expected constructor,析构函数错误,还是 ‘(’ token之前的类型转换?

c - 链表节点初始化,不使用malloc()

c++ - Linux中共享对象和普通库的区别

c++ - 从 base64 C++ 解码和保存图像文件

c - strcpy 函数使用较小的目标数组大小

c - C 中的子串

c++ - 实现与声明分离的库能否从 constexpr 中受益?

c++ - "Illegal block entry"以及 yaml-cpp 中的 YAML 怪物示例