我正在使用 libbson C 库来处理 MongoDB。在这个库中,每个定义的结构都是无标签的,带有 typedef 别名,例如bson_t 结构:
typedef struct {
uint32_t flags; /* Internal flags for the bson_t. */
uint32_t len; /* Length of BSON data. */
uint8_t padding[120]; /* Padding for stack allocation. */
} bson_t
我想通过显式键入
struct name
来使用我的所有结构类型,因此在本例中,它将是 struct bson_t
。只是个人喜好,无意冒犯大家。
如果库使用
typedef struct bson_t { ... } bson_t
定义了上述内容,那是可能的,但到目前为止,我必须使用 bson_t
类型的唯一方法是不使用 struct
前缀。
我可以做些什么来使
struct bson_t
引用 bson_t
类型吗?除了编辑 mongoc.h
文件之外,就是这样。
谢谢!
C 2018 6.7.2.3 5 说:
…不包含标签的结构、联合或枚举类型的每个声明都声明不同的类型。
和:
两个位于不同作用域或使用不同标签的结构体、联合或枚举类型声明声明不同的类型...
因此,任何带有标签的结构声明都会声明与任何不带标签的结构不同的类型。 C 标准没有提供任何方法使它们成为同一类型。