如何为libbson的无标签typedef结构体添加标签以使用struct bson_t?
解决方案
你可以通过宏定义实现用struct bson_t指代原bson_t类型,无需修改库源码:
#include <bson.h> // 在包含库头文件后定义宏,将struct bson_t替换为bson_t #define struct bson_t bson_t
当你编写struct bson_t *doc = bson_new();这类代码时,预处理器会自动将其替换为bson_t *doc = bson_new();,完全符合libbson的类型要求。
注意事项
- 务必将宏定义放在包含
bson.h之后,避免干扰库内部的类型定义。 - 该方法仅作用于你自己的代码,不会影响库本身的编译和运行。
- 只要库保持
bson_t这个typedef别名不变,后续版本更新也不会影响该宏的有效性。
不建议手动声明struct bson_t并模仿原结构体成员定义,因为C语言中即使成员完全一致,不同标签的结构体仍属于不同类型,强行关联可能因库版本更新导致布局不匹配,引发未定义行为。
内容的提问来源于stack exchange,提问作者Francesco Ballardin
相关产品推荐
相关产品推荐

